说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Swift没有异常处理,遇到功能性错误怎么办?

HTML文档下载 WORD文档下载 PDF文档下载
在Swift中没有异常处理或抛出,当你编写库的代码执行了一个失败的子程序,且解析可选类型太麻烦时,你打算怎么做?文章作者所遵循的思想一直是想要保持Swift代码的干净整洁,所以都尽可能的避免对可选类型的使用。

在Swift中没有异常处理或抛出,如果不能像Java一样使用异常控制流结构,那当你编写库的代码执行了一个失败的子程序,且发现解析可选类型(Unwrapping Optionals)太麻烦时,你打算怎么做?我所遵循的一直是想要保持Swift代码的干净整洁,所以都尽可能的避免对可选类型(Optionals)的使用,同时还要维护它们传达错误操作的目的。

最近,Colin Eberhardt指出不抛出异常会让嵌套解析条件(Unwrapping Conditionals)的代码变得杂乱:

if let a = a {  if let b = b {    if let c = c {      println("\(a) - \(b) - \(c)")    } else {      println("Something was nil!")    }  } else {    println("Something was nil!")  }} else {  println("Something was nil!")}

不过似乎有一种替代的方法我们可以尝试:使用闭包形式的回调函数。

在Return语句中使用回调取代可选类型

可选类型会让你的代码变得杂乱,如:

let maybeResult: JSONData? = JSONParser.parse(aJSONString)if let result = maybeResult {    // ...}

调用方需要管理被调用函数功能的结果,它需要知道被调用函数对某些扩展所做的事情。Optionals使用很简单,但你代码中仍会显示解析可选类型留下的复杂的痕迹。

考虑East-Oriented代码的原则:如果一个函数返回一个值,定义信息是向西传播。若它发送的是一个信息时,是向东传播。一个Optional返回值是向西传播信息,而且也正因为它是一个Optional ,较之普通的返回值要更复杂。因为它在一个调用中有两种情况。如果是嵌套调用和嵌套的if语句则会更糟糕。

让我们转移注意力到被调用函数工作的失败部分。

JSONParser.parse(aJSONString) { data: JSONData in    // ...}

现在parse()需要考虑失败处理,只有一切运行顺畅时,它才会进行调用实现成功关闭。反之,调用方不会采取行动。

这足以去执行异步获取和UI更新。如果需要的话,解析器将记录或报告致命的失败地方。
你甚至可以外包加工大量的数据到一个XPC服务,以及从一开始设计异步交互。

如果需要的话,我们甚至可以显式地处理失败部分:

JSONParser.parse(aJSONString, success: {    data: JSONData in    // ...}, failure: {    error: NSError in    NSLog("An error occured while parsing: \(error.description)")})

以NSAsynchronousFetchRequest为例:它有一个完成的代码块,如果请求失败,将不会被调用。Cocoa API也开始越来越多的使用代码块。所以,你可以尝试使用这种方法,也许能够改善你应用的控制流。

文章来源:christiantietze

(编译/刘璐璐 责编/唐小引)

进步还是灾难的开始?科学家首次通过互联网实现“心灵感应” 叫板Apple TV 谷歌发布Chromecast的iOS应用 性能提升100倍的秘密武器:一行SQL代码的妙用 60个开发者不容错过的免费资源库 专门针对初学者的Node.js教程 初创公司Parse.ly:1年内捕获1.6亿独立访问用户,收入增5倍 融资新方式:用未来10年收入的6%融资10万美元 小米手机-HAXLR8on:创客32小时全纪实 图文:看苹果下一代iPhone细节 能吸引你购买吗? [开源推荐]Intention.js:通过HTML进行响应式开发 Android副总裁Hugo Barra将加盟小米 三星将召开首届开发者大会 推新SDK和S Pen 15个步骤创立技术公司,并收获千万用户(三) H3Cloud:为企业提供最优化IaaS方案 VMware、红帽对决云管理平台 大数据辅助决策,构建智慧城市 所见即所得:四款免编程移动游戏开发引擎推荐 PaaS乱局:Container的新机遇 IDC再度下调2013年全球PC销量预期 平板电脑中枪 Waze联合创始人做FeeX 用众包方式增加银行服务透明度 Ripple CTO Stefan Thomas:Bitcoin与未来支付应用开发 第二届Coding For Fun编程马拉松实时快报→→ 数字化你的脸:14个智能眼镜开发平台 Unite2013开发者大会:Unity新增多项重磅革新 微软大中华区副总裁谢恩伟:微软云+端应用模型前瞻 移动周报:从硬件马拉松到Barra加盟,本周小米很火 小而美的Diffbot:将Web页面转化为数据库,获多位科技大佬注资 “叙利亚电子军”对美国多家网站发起“电子制裁” 麻省理工TR35之IT界年轻有为创新者(上) Linux用户须知的16款实用软件 新平台,新惊喜:记第二届Coding For Fun 包厢生日快乐! 目录权限问题 请大家帮忙解释一下这条sql语句 弹出确认取消对话框,点击确认后执行一些句子,取消后执行另外一些句子,而不是点击取消后就返回了,急 每逢佳节散点分,祝大家中秋快乐! 这是ODAC的BUG??????? 参与者,散分!!!!!!!!! attributes问题 一个小问题----如何让组合框显示想要的列? 关于userenv 紧急求助,如何识别我的邮件服务器正在向处发大量的垃圾邮件,我用的是MDaemon6.03,详情见里面,来者有分. 想对Corba交流的,就来登记一下吧?我的MSN pepo8000@hotmail.com 这个程序没有错误, 请问这个东西是什么? 世纪难题(请高手救命) editplus 怎么去掉 自动保存.bak文件 weblogic蔡鸟求教 我用NMUDP,用try...except...也无法截获“stream write error”,怎么办? windows 20003 的计算机之间可以ping通但是不可以在网上邻居访问 关于备份方式的选择问题,大家中秋快乐!! 如何控制IE的工具条,比如刷新按钮! EJB客户机与Servlet访问eJB的速度的比较 请问如何写一个dll给pb调用啊!比如调用MessageBox()的功能 用javascript或vbscript如何控制radio单选按钮? 菜鸟初学问题,查询两个数据库同一表格中某一字段重复的记录呢? 哪位大哥帮我看看,怎么配置 中秋节送分咯!!!! 如何在winform的datagrid中的cell里面截获keypress事件? 征集创意:在手机短信上还能开展什么新的,有商业价值的业务?就是大家潜在需要而没被开发出的业务。 怎样用c语言驱动1台modem拨通另一台modem? CSDN的朋友们,心中的困惑还需你们的热心帮助。 pb中处理数组的大问题sossos CVS登陆不上 请问各位,现在用什么软件配合.NET做界面设计比较方便一点? 什么操作系统最好? 在一个页面中把串%ba%ba%d7%d7还原为中文字,,用JAVASCRIPT来实现,, 与数据采集设备的通讯问题!!!!!!up有分,高手请进! 中秋节了,发薪水了,散分 讨论:关于Notes数据库隐藏设计的问题 大家中秋快乐,有关内存的释放问题,急急... 送分贴,翻译 更改文件属性的API如何定义? 谁能告诉我这是怎么回事?? treeview显示不正常 Applet问题 Asp程序无法访问远程XML文件 想建立一个公司内部的拔号服务器,像163/169那样?? 问两个简单的C语言问题 如何控制IE的工具条,比如刷新按钮! applet显示问题 新手:关于GDI,怎样取窗口非Client区域的DC? 使用asp连接webservice,实现短信的插入,发送,2003操作系统msxml3.dll 错误 '8000000a' ,2000没事 DataSet或DataView中如何实现类似数据库命令 LIKE 的筛选功能? 风景如什么 是一个成语 A voice from the bottom of coolness 小红身高1.60米这是相对高度吗 为什么 身高188是标准高度吗?不穿鞋90后 高一英语一道填词第十六题, 怎么查找datasheet上的FPGA对应管脚啊? 鱼可以加什么偏旁?三个,并组词.还有舟.月.虫.米.是偏旁,像鱼加羊=鲜是不可以的越快越好,最好1月5日查出来啊! 它米鱼怎么做 用这四个字组成一个顺口的词,音可以变:鱼、诺(或米)、霖、文用 鱼 诺 霖 文 这四个字 组成词 诺可以用米来代替,也就是 鱼诺林文 和鱼米林文 都可以 音调可以变,变成零一个字,但是拼 为何今年冬天雪这么多?山东东营人,平时冬天一般就两三场雪,今年一下得有快十场了.这是为什么? 春景类的成语关于春景美丽类的成语, 茶党加速美国政坛裂变日媒:中国重视周边外交令日本警惕警惕“跷跷板”极端效应新闻集团窃听丑闻“世纪审判”英开审 巴无人机受害者赴美讨说法朝鲜称将继续发射卫星 金正恩首迎外国布鲁姆米兰达赴舞台剧 疑密谋离婚事宜杰克逊私人医生刑满出狱 欲再获行医执聚焦全球健康服务业 看产业带来的经济中断30年 美国与新西兰恢复联合军演格鲁吉亚新当选总统:将与俄构筑建设性是什么决定了一个人是勇敢还是怂?日媒声称:日本外相因中方态度消极或取IKEA、BMW、Lego 等这些大“全能”的印象笔记遇到了问题,你可以头发掉光光,好可怕呦,感觉get到了一个不得了的新技能!!说.... 我刚切好的胡萝卜是不是被哎哟!小小年纪不学好,竟会壁咚高效的团队配合!告诉你什么叫神一样的嘿嘿嘿!请问这车是啥牌子?Apple Pay: 你的朋友圈被席神道无量学校里那些事大唐无双之王者归来电影世界自由行者逆袭万岁电影世界里的电磁炮超能竞拍师虚拟神格1875我来自未来无限之虫族降临剑荒劫经青青草原旅游党岭旅游甲居藏寨旅游武功金顶旅游发云界旅游龙山旅游高过河漂流旅游大观园旅游苍山旅游洱海鱼鹰驯化表演基地旅游解放碑旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘