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

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

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

以色列玫瑰:细数十位科技创新领域的女性佼佼者 8款最佳的开源在线学习CMS系统 在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 腾讯大数据之TDW计算引擎解析——Shuffle AMD APU14 BEIJING技术创新大会精彩看点 这是云整合时代开始的节奏吗?Rackspace考虑退出 一周热点:如何使用15美元每月的机器实现百万文档检索 黑客获取数据信息的目的和进攻手段及应对之策 Surface Pro 3遭大曝光:799$起、四色可选、12寸屏幕 当软件遇上设计,浅谈敏捷UX VS.精益UX DIY“物联网”——自己动手处理传感器数据 AMD成首家X86+ARM双架构计算 欲寻新蓝海 锤子手机发布:Smartisan T1与其背后的开发团队 第六届中国云计算大会在北京隆重举行 替代笔记本的Surface Pro 3:800g、9.1mm,极致轻薄 PWorld2014:畅谈企业软件向“大平台”+“微应用”变革 微软公司全球资深副总裁张亚勤:云计算引领互联网物理化 亚马逊网络服务全球市场副总裁Ariel Kelman:亚马逊AWS云服务推动创新 终超苹果,谷歌成全球最有价值品牌 高通业务拓展总监沈周全:以软件为基础建立差异化优势 设计你所需要的,而不是你想要的 疯狂谷歌建广告天网:电冰箱、汽车仪表盘、恒温器、眼镜和手表 开发者眼中的编程语言…… 寻下一突破口?黑莓推Project Ion项目,正式进军物联网 无人驾驶汽车真的要来了:飞思卡尔研制视觉芯片 支持物联网开发! Qt发布5.3版与嵌入式企业版 5月23日:Java已经19岁啦! Google发布Dart1.4版本,新增Observatory工具 《近匠》Mixtile:跑在盒子中的嵌入式平台 从研发、平台化到营销:移动时代,汽车厂商如何升级? 神洲数码怎样? jsp如何将web页面的String型转换为long型? 极容易的问题 ,先来先得! 大虾,救命啊!!!!!! jsp如何将web页面的String型转换为long型? ★★★帮忙翻译一句话!谢谢★★★ **冗余醒目**《如何在输入的时候减小冗余》**冗余醒目** 倡议书:维护您的网络权益 [100分,两日内结]怎样在jsp中得到我的数据 两个菜鸟问题,送分拉 线程与消息??? c、odbc、嵌入式sql的关系? 简单的重载问题! 用<input type="fiel" name="test">时,怎样判断输进去的文件是硬盘上实际存在的? 请问哪里有eclipse 下载? FINDING SOMEBODY! 显示器不亮,请帮忙,解决给100分 写在3.15黎明的前夕 **冗余醒目**《如何在输入的时候减小冗余》**冗余醒目** 各位,CSDN的论坛都是用些什么工具开发的?? 请问个位大虾,我的程序为什么不能执行(TC++3.0) 在VC中怎么调用IE来显示一个页面? 怎样在新开的页面给已开的页面上的一个TextBox插入新的字符串 [转贴]网络版权问题 **冗余醒目**《如何在输入的时候减小冗余》**冗余醒目** 用purify测试过的release版本怎么在别人的计算机上运行有问题? 如果用asp连接mysql,请问连接字符串是什么? 我要做一个在小型的对等网上运行的数据库软件,用什么方法好点? 如果用asp连接mysql,请问连接字符串是什么? 请高手帮我解答一个关于在ASP中调用存储过程的问题? 怎么输入繁体字? 足彩-03010期:1033031110310 请教高手在DELPHI里怎样实现把一个文件存储到ORACLE上, 然后又如何调出来使用?? 我快疯了救救我!!!!!!!!!! 我为什么要做个刁民? 屏幕上显示绘多条曲线,要对每条曲线单独进行操作如何实现? 怎样避开程序对softice和trw的检查 想学ACCP不知道社会的认可度? 怎样使用windowsxp/2000的修复程序? C:\winnt\下有一个hh.exe文件,有什么作用? 这首诗我觉得用在程序员身上也很合适 在WebSnap中如何实现gride的隔行显示不同颜色,就象我们现在看到的一样?? 关于《C++ Primer plus(中文版)第四版〉》,大家发表一下看法好吗。 中文文件 颜色代码转换的问题大家帮忙呀.. 程序编译问题 问一个可笑的问题。希望能得到回复 那位用过TfcShapeBtn控件? 急!从NT4到W2000后,为何ASP出错? combustion? 100分有人答了吧 我短路看不懂,为什么当S闭合时R1被短路? 原发性高血压是什么遗传类型?是常染色体显性遗传,还是常隐?伴X隐?伴X显?我不是得这病,我是做一道生物题目时碰到的 1万标立米等于多少吨 物理一道题目求解了两种金属的密度分别为,去质量相同的这两种金属做成合金,试证明这种合金的密度为(2ρ1-ρ2)/(ρ1+ρ2)【假设混合过程中体积不变】 带鱼身上有哺乳动物牙齿吗? 欣欣向荣的反义词是? 发现的反义词是什么? 青蛙跳是什么能?.. 如图 在正方形ABCD中 EF分别是AD DC上的点 且AF垂直BE 求证:AF=BE如图 在正方形ABCD中 EF分别是AD DC上的点 且AF垂直BE求证:AF=BE 发掘的反义词是什么wu 带鱼的身体里长出牙齿是怎么回事?在吃鱼的时候不小心从鱼身上,嗑到一颗象人或动物的牙齿一样的鱼骨头! 螺栓拧紧力矩 怎样使用手提式灭火器 哺乳动物的牙齿有 :( ) ( ) ( ) 欣欣向荣的反义词是什么 为什么这个句子上不加a呢1.AVATAR is a fantastic movie.2.AVATAR is super movie.为什么第二个句子不加a 变成 AVATAR is a super movie. 手提式灭火器的使用方法? 杯子里有个装电池的小水瓶是干嘛的啊我昨天新买了个杯子.打开一开里面有个像壶胆一样的小瓶子,还可以按电池, 为什么这个句子不加A呢That is nice dree,为什么不说成 That is a nice dress 呢,而That is a lovely hat却要加a呢? 手提式机械泡沫灭火器如何使用? 请问用高锰甲酸清洗龟头是高猛甲酸外用片还是消毒片啊 青蛙是怎么跳的? 空气是波疏介质 可是波在其中传播的慢?声速在气体里最慢啊~最慢的介质叫波疏介质? 为什么有的化学元素的名称在周期表没有 如;水 高猛甲酸 一个水平弹簧振子的振动周期是0.025s,当振子从平衡位置开始向右运动,经过0.17s时,振子的运动情况是( )A.正在向左做减速运动 B.正在向右做加速运动C.加速度正在减小 D.动能正在减小 一个正方体玻璃容器棱长2分米,向容器中倒入5升水,再把一块石头放在水里,这时量的水深是15厘米.石头的体积是多少厘米?只要算式. 用酸性高猛酸甲氧化液体. 一个水平弹簧振子的振动的周期是0.25s,当振子从平衡位置开始向右运动,经过0.18s时,振子的运动情 手提灭火器的结构 人生就像一个杯子,你在杯子里装了什么拜托了各位 将一个弹簧振子拉长一些,然后由静止释放,经0.5秒振子经过平衡位置,此振子的震动周期可能为?A 0.6秒 B 1 秒 C 0.5 秒 D 0.4秒为什么 灭火器现在很普遍,那么是从什么时候开始进入人的生活的呢?又是谁创造发明了灭火器呢? 怎么区分一种病是常染色体显性遗传 还是常染色体隐性遗传```说清楚点```能举例的更好``` "发现"的反义词.谁会?刚看到的一道题目.请你答一下.今天教师业务考试上的一道题.试卷的编写者真是异想天开了. 灭火器是哪个发明的? 阅读短文《礼物》听了老人的话,你想到了什么?文章内容是:有个孩子,在他出世的那天,妈妈就离开了人世.从此,每当看到别人从妈妈那儿得到礼物,他就非常伤心:我真命苦.我的妈妈竟来不 欲速则不达 议论文分论点 动听的近义词反义词 时光老人给我们的礼物是珍贵的 缩句 发现的反义词是什么吗? 请专门研究遗传的朋友解答:一个女孩的染色体来源必定有一条是来自祖母,爷爷没有遗传基因给她请专门研究遗传的朋友解答:我个人认为,一个女孩的染色体来源必定有一条是来自祖母,爷 时光老人给我们的礼物是珍贵的 怎么缩句? 反义词:出现( ) 美妙的近义词和反义词 时光老人给我们的时间是珍贵的 缩句 一质量为M的物体放在水平面上,上面安装一根原长为L,劲度系数为K的轻质弹簧,现用手拉弹簧的上端P点(开始拉时弹簧为原长)缓缓移动,当P点位移为H时,物体离开地面一段距离,则物体在此过 在杯子里面装米,往下倒,改变杯子高度,形成的圆锥会有什么规律一楼,落地点是什么 带鱼和鲫鱼有什么不同从形状等上分 硫酸亚锡的保质期为多少?06年的现在还能用么?分析纯、做试验用 能在 衣服 杯子 金属上印LOGO的机器是什么呀? 近义词: 尊重——( ) 仇恨——( ) 真挚——( ) 反义词: 崇高—— ( ) 坠落——( ) 发现的反义词是什么 如图,在平行四边形中,AB‖CD,O是BD的中点,且AB+CD=AC,求证AO⊥DC 真挚的近义词和反义词是么 出现的反义词是什么 氨水是弱电解质、下列叙述正确的是()A、NaCl溶液在电流的作用下电离出Na+B、离子化合物一定是电解质C、氨水呈弱碱性,故NH3是弱电解质D、溶于水电离出氢离子的化合物都是酸答案是啥A还 真挚、强烈、朦胧的近义词和反义词是什么? 物理的一个疑问...嗯在一个电路中,电压表测一个定值电阻,当滑动变阻器的阻值增大时,为什么电压表的电压比滑动变阻器阻值为0时的电压要大,我自己理解是滑动变阻器的阻值增大了,通过电 遗传性白发是常染色体显性遗传还是隐性还是X连锁还是Y连锁... 真挚的反义词和近义词是什么 美国最新隐身驱逐舰下水 明年秋季开始消息人士称叙化武生产设备销毁工作如期纽约提高香烟禁售最低年龄 未满21不研究证明蝙蝠系非典传播源 病毒可由动小狗被饿三周吃伞充饥 其主人不愿救治男子扮高富帅专门诈骗按摩女 谎称投资巴西里约热内卢社会游民多 5000余媒体曝美全球监听地图 澳大利亚是美监近3成日本大学毕业生3年内离职 疑被美国艺术家创造“糖果肖像”庆祝万圣节法国一名抢劫犯曾为iPod及8欧元抢韩媒:中国学生“弃日择韩” 赴韩留学俄罗斯一科技园项目涉嫌违法 或致数百新10英镑钞票印简 奥斯丁头像 被批伊朗或取消向巴基斯坦供应天然气巨额合乌克兰加入欧盟协定签署期或推迟到20女子坚持每天喝3升水 4周后外貌似年西班牙首相关注美监听行动 称将听取情法国将实施冬季禁逐令 拖欠房租者也可英媒体窃听案开审 检方称三记者认罪背外国驻韩外交官5年犯法48起 外交豁六安市基层法律服务年检注册完成安徽灵璧一八旬老翁奸淫痴呆女致孕获刑六安市上周九位老人免费办理遗嘱公证收获喜悦中国政务微博在公民问政热潮中前行安徽:吸毒人员“低龄化”趋势明显六安金安法院网上“晾晒”裁判文书金安禁毒百日攻坚战初战告捷两男子帮助80余用户改装电表 窃电3牙克石市秸秆综合利用率达96%合肥火车七个小时到深圳?这个可以有(亚欧博览会举行首个国家馆日霍山:山城编织秀美画卷池州:十条硬规定打造“文明城管”六安城区千余名环卫工免费体检自助图书馆亮相东胜区街头各国处理厨余垃圾盘点:美国推广厨余垃林中森谈两岸服贸协议:13亿人口商机黑人老板骂员工“黑鬼” 被判歧视赔2媒体称叙冲突已损失1.5万亿美元 重河北落凤坡恐龙足迹恐遭破坏 专家称亟
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘