Swift可选链接总是使用if let构造完成,还是仅使用带有可选项的问
根据Apple文档,可选链接如下:
我对此的解释是,以下结构是可选链接: someMasterObject.possiblyNilHandler?.handleTheSituation() …如果处理程序不是nil,则上面的行将调用handleTheSituation方法,如果处理程序为nil,则优先失败(跳过行). 但是,我看到的可选链接的几乎所有示例都使用“if let”构造,如下所示: if let handler = someMasterObject.possiblyNilHandler{ handler.handleTheSituation() } 事实上,我在网上找到的文档和示例大量使用了与可选链接相关的“if let”结构,看起来似乎是IS可选链接. 但是,我是否正确假设我的第一个示例是支持使用可选链接,并且if let构造是使用(或紧密绑定)可选链接的另一个构造? 解决方法
结论是正确的 – let是一个独立但有用的结构.在上下文中,它仅在if-body中引入绑定,并且仅在绑定值不为-nil时才执行if-body. (从技术上讲,它会解开可选的绑定.)
let不影响如何处理右边的表达式(有或没有链接).例如,如果someMasterObject是可选的/ nil,它将失败而不是“链” – 即使使用let. 当一个或另一个(或两者)更“正确”时,取决于具体情况:例如.什么是被束缚的以及纠正措施应该是什么. 例如,如果someMasterObject可能为nil,我们可能会使用以下内容同时使用chaining和let.还要注意返回值如何重要并且不是简单地丢弃或“失败时为零”: if let handler = someMasterObject?.possiblyNilHandler{ return handler.handleTheSituation() } else { return FAILED_TO_CALL } 然后将它与非等效的链式形式进行比较,该形式只会在失败的调用情况下返回nil,但是nil可能是来自handleTheSituation的有效返回值! return someMasterObject?.possiblyNilHandler?.handleTheSituation() 另一方面,请考虑始终将链接直接转换为嵌套的if-let语句: result_of_expression = someMasterObject?.possiblyNilHandle?.handleTheSituation() if let master = someMasterObject { if let handler = master.possiblyNilHandler { result_of_expression = handler.handleTheSituation() } else { result_of_expression = nil } } else { result_of_expression = nil } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 《从零开始学Swift》学习笔记(Day 42)――构造函数调用规
- 实战DDD(Domain-Driven Design领域驱动设计:Evans DDD)
- ruby-on-rails – 使用电子表格gem自动调整excel列宽
- TinyXML读取XML文件 [大三四八九月实习]
- c# – 检测图重新收敛的算法(类似于公共子树?)
- PostgreSQL启动过程中的那些事十六:StartDataBase梗概
- flashback空间爆满IMAGECOPY 占的比率最大,通过RMAN释放空
- ruby-on-rails – Rails:在category_helper.rb中定义的方法
- c – LLDB有时会显示矢量数据,而其他时间则不会
- com – 在C中调用Visual Basic DLL,第2部分