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

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

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

《近匠》Bmob:免费无限制的公有云服务 MDCC应用征集最新动态:3D手游成热点、硬件种类丰富 闪迪Ultra II SSD:采用TLC闪存,最低价为79.99美元 现有技能不浪费!基于Titanium的跨平台游戏引擎Platino 跳过开发者,专注补Bug的iOS 8 Beta 6悄然发布 集群管理可以很简单,Google又放大招 应用内直接打车:Uber面向第三方开发者开放API 百万美元巨奖!英特尔启动感知计算挑战赛 IBM 2014技术峰会在京开幕! OpenGL 4.5规范标准发布,大大提升API性能! 更萌更贱:Flappy Bird开发者推虐心新作Swing Copters 学习的革命:AR增强现实遇到儿童应用 颠覆旧概念,IBM Bluemix开启云开发时代 专访企业QQ SaaS团队,谈企业级LNMP架构设计 《近匠》Coding:将软件开发搬到云上 小米与美视频游戏服务Ouya合作 进军国内客厅 新工具Get!轻松实现2D画面动态光影的Sprite Lamp 一周消息树:罗升阳的Android之旅 手游不易:GungHo 3.44亿美元售Supercell股权 周末去哪儿 当然是去2014微信开发者大会!(附参会提醒和名单) 开源框架Ember.js迎来1.7.0和1.8 Beta 1更新 《近匠》RealSense:几行代码,为游戏添增实感交互 MDCC游戏应用征集关键词:中小团队,3D,转型,IP 共话HealthKit:能否颠覆医疗保健生态系统? Perception Neuron系统,让动作捕捉技术不再高冷 2014年DevOps实践调查报告 .NET程序性能的基本要领 百度手机卫士宣布开放三大能力 构建互联网安全生态 火速围观,AMD APU新芯片架构A68H呼之欲出! 对于测试人员而言,TDD意味着什么? 年用电910亿度,那些庞大的数据中心该用什么支撑 奇怪的现象:判断不了SQL sum()查询结果!!! 2003高考试题 设置访问表命令:“access-list 2 permit 10.0.0.0 0.0.0.255”中10.0.0.0 和 0.0.0.255分别指什么? 请问谁知道这是什么缘故啊? 如何计算cpu和memory的一般的使用上限 在delphi中使用什么报表控件打印的报表效果较好 谁知道db或dbf头文件的格式? 急急 NMFtp中我想从ftp服务器下载指定文件扩展名的文件,该怎么办? 初始化页面的时候,如何使TextMode="Password"的asp:textbox有默认值显示? IBM软件清库存(大优惠) 又是可恶的乱码问题 struts与数据库!在线等待! 如何开发asp.net程序(基于vb) vc++的链接错误 如何用程序动态的获得activex控件的方法属性事件信息 请教:使用web.xml做资源约束时如何由自己的程序来做用户验证 请问:怎样编程来来虚拟网卡? 急!创建LOOKUP的问题 如何计算cpu和memory的一般的使用上限 新问题请教! 老问题:从Excel文件里把数据导入导数据库中 有汇编玩的非常牛的人吗??? 字符串操作的简单问题 学习J2EE需要装什么软件? >>有关记录的问题??<< 请高手指教:出现“ORA12663:服务器未提供客户机要求的服务”问题,怎么解决? 大侠救我! 动态sql问题请教,谢谢 填充combobox的问题 windowsxp不能创建拨号连接 怎樣轉換時間格式 ACCESS问题 Linux下上网问题?在线等待!急!急!急! 终极讨论:从Excel文件里面导入数据 winsock的问题 关于WINDOWS下邮件程序编写问题 Solaris下的Makefile问题 在lan里面的两台主机之间怎么配ppp连接,没有modem 我的SQL数据库安装的是实例,好象有问题哦! 高分求票据、合同套打代码! 事务问题,请大家帮忙,在线等待,50分相送!!!! xml解析的问题? 关于CRuntimeClass,请指教。 100分求解(在线等待) 终极讨论:从Excel文件里面导入数据 CString怎样转换为char * 类型? 有关爱情与事业的讨论! replace(replace(replace(replace(str,"<","&lt;"),">","&gt;"),chr(13),"<br>")," ","&nbsp;")是什么意思? 非常简单的问题!!! 看看这个portal做的怎么样? 如何去掉word中的页码 我英语不是非常好 想考本科但是要过英语a及 求方法如题 人寒冷的感觉是怎样造成的? doing是什么意思 suggestion怎么用 怎样才能给人一种冰冷的感觉 已知a,b为非零向量,函数f(x)=(xa+b)(a-xb),则使f(x)的图像为关于y轴对称的抛物线的一个必要不充分条件是A.a⊥bB.a平行bC.|a|=|b|D.a=b 已知二次函数 f(x),f(1)=4,f(2)=7,f(-1)=10.求这个二次函数的解析式 英语翻译Poligono Industrial Baix Ebre H STREET PLOT 79/80 形容一个人出门便要打扮漂亮,而家中乱得如垃圾堆一般的词语 English is widely used _____ travellers and business people all over the world.A.to B.as C.by D.for 请翻译, 如图,四边形ABCD中,AD平行BC,点E在CD的延长线上,连接DE,交AB于点F,连接DB,∠AFD=∠DBE,且DE方=BE乘CE,(1)求证:∠DBE=∠CDE,(2)当BD平分∠ABC时,求证:四边形ABCD是菱形. 爱因斯坦的最大失误怎么样 养怡之福可得永年的永年是什么意思? 英语翻译llacer ramirez lerardo laguia numero 49 alzira 46600西班牙巴伦西亚的一个地址。请注明那个是街道什么的 最好能翻译成中文的地址 仲永从幼年的天资过人却落得个“泯然众人”的结局,这个故事给了你哪些启发呢?请你从不同角度思考.(1)从仲永的经历来看(2)从仲永父亲的行为对仲永的影响来看 若偶函数f(x)的定义域为【-1,1】,且在【0,1】上单调递减,若f(1-m) 英语翻译CALLE MARIA DE GUZMANNUM 58 Piso BJ 28003 MADRID 罗氏沼虾名字的由来 中华苏维埃第一次全国代表大会和全国第一次代表大会有什么不同?中国苏维埃第一次全国代表大会与全国第一次代表大会有什么不同(就是1921年的那一次)? 英语翻译街道:Avda,fuenlaburad65 地区:leganes Madrid Espana 韶山冲的读音“韶山冲”的“韶”怎么读?急用! 在三角形ABC中,已知c=根号2+根号6,C=60度,求a+b的取值范围. 阴菜是什么菜 喜阴的农作物有哪些? 英语翻译中远物流是我国最大的中外合资第三方物流企业,随着市场竞争的加剧,企业纷纷在创新战略、加强增值服务上下功夫.中远集团为了更好的物流服务在国内、国际市场中赢得竞争优势, 两会中的人民代表大会和每五年一次的全国代表大会的区别是什么?如果本年度召开了全国代表大会,还要召开两会中的全国代表大会么? 在北方什么农作物喜阴 养怡之福可得永年怎样理解 几何除了欧式几何还有哪些几何大类? 什么作物喜阴 英语翻译1、图片中使用白盒代替彩盒2、这种包装方式不能通过drop test3、详细包装方式,请查看附件的说明4、由于我们没有做过12pcs的包装方式,所以我们没有Die-lines,但我可以提供Color box的参 养怡之福的之,盈缩之期的之我知道这两个之词性一样,但不知是什么词性, 兵的故事;”但此刻,他肯定是最感寒冷的一个人“?这句话和故事的结局有什么关系? 英语翻译This email is to confirm that your email has been received.If you are applying for an advertised vacancy please ensure you attach your CV and supporting documentation.Please note the company does not accept prospective applications. Vien的意思Vien这个英语名字翻译过来叫什么.. 有什么喜阴的作物啊?我想种在我家的大树下! 曹操的"盈缩之期,不但在天;养怡之福,可得永年."是什摸意思? Vien什么意思 为什么说“但此刻,他肯定是最感寒冷的的一个人”?这句话和故事的结尾有什么关系?《兵的故事》天黑了.暴风雪呼啸得更加(愤怒 狂怒).一辆客车已经被暴风雪困在公路上六七个小时.车上 “盈缩之期,不但在天;养怡之福,可得永年.幸甚至哉,歌以咏志.”意思. sinh 《兵的故事》中为什么说"但此刻,他肯定是最感寒冷的一个人”?这句话和故事的结局有什么关系?” 导入柔性化管理机制,以适应市场快速变化的需求.(翻译英文,误用翻译软件) 定义与性质的不同急以三角形为题 为什么说但此刻,他肯定是最感到寒冷的一个人?这句话和故事的结局有什么关系天黑了.暴风雪呼啸得更加(愤怒 狂怒).一辆客车已经被暴风雪困在公路上六七个小时.车上二十几名乘客中,有 已知二次函数f(x)满足f(0)=f(4),且f(x)=0的两根平方和为10,图像经过(0,3)点,求f(x)的解析式如题 英文名Vien感觉怎么样?是什么含义? 中华人民共和国第十一届全国人民代表大会第二次会议是什么时候开的 英语翻译刚刚在微信里头看到前世是怎么死的,由于蛮无聊的,就测了一下,出来的是 粤语 笑西死,你前世既然一棵桉树,= =能帮我翻译一下吗,人家测出来的再奇葩好歹也是国语,这粤语...真心蛮 性质和定义的区别 第十一届全国人民代表大会第四次全体会议什么时候召开? 已知二次函数f(x)满足f(0)=f(4),且f(x)=0的两个平方和为10,图像经过(0,3)点,求f(x)的解析式. “性质”和“意义”有什么区别 第十一届全国人民代表大会什么时候开始,什么时候结束? 考好英语笔试部分的窍门 方法 喜阴的菜有哪些 方仲永从神童到“泯然众人”,这种变化的根本原因是用原文回答 如何使用suggestion 理一理,连句成段.只写序号【】这个八边形的''藻井,还是古代的木质扬声器呢【】最典型的戏台 绍兴柯桥区塘乡的宾舍戏台距今已有400多年的历史.【】藻井壁间画着八仙过海的故事.【】在 方仲永由神通到泯然众人矣的三个原因是什么 土耳其总统警告说大规模杀伤性武器扩散俄总理:美国窃听外国领导人的行为“无桐庐环保局局长办乔迁宴被免职杭州秋石高架半山匝道11月初启用孕妇被车撞伤无人施救 2名村官停车救3名中国专家受邀参与叙利亚化学武器核联大主席称新兴经济体成为促进发展中国运营商公布垃圾短信举报方式 违规号码河南大货车路过徐州遭胡乱罚款 涉事警中储粮掺转基因油续:千吨进口菜子油获印度开建182米高世界最高雕塑 呼吁加沙唯一发电站停运使供电形势严峻美国洛杉矶国际机场发生枪击事件中储粮就掺转基因油事件处分6人 一公联合国秘书长与世行行长将再次联合访问希腊首都发生枪击事件两死一伤北京黑停车场当城管面收费 称公司领导希腊首都雅典发生枪击事件 致两人死亡男孩疑因被逼检讨跳楼身亡 老师至殡仪北京多部门称对荷兰艺术家“雾霾吸尘器崔永元未明确回应“因抨击转基因离开央信用卡还可以长这样:兴业银行推出手环暗夜冰雷,一个用生命在创作的人要买“宝宝”的人注意啦 赶在今天15中行:"T+0"货基纳入负债监管体系2015最新全球富豪榜:中国科技富豪大盘探底回升释放三强攻信号,下午拉升RS与Red Pitaya签订全球独央行再次双降 信用卡分期手续费不降盘点长得漂亮的中国品牌车型腾讯的大帝国之梦人生得意需尽欢(酒店篇)中粮回应称“添加剂无超量” 专家呼吁What is this?盘点十大丑带你装逼带你飞 十秒教你成为懂球帝高纬环球:中国制造业适宜指数降至第五觉醒幽鬼在竞技场表现与国家对阵容的对生活工作两不误:最热门双卡双待4G手SK-II/Fresh/Corege数据在企业中的应用三月市场在售2000元左右最具性价手高傲骑士 没落贵族 款款经典 诺基亚
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘