You specify optional chaining by placing a question mark (?) after the optional value on which you wish to call a property,method or subscript if the optional is non-nil. … optional chaining fails gracefully when the optional is nil …
我对此的解释是,以下结构是可选链接:
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可选链接总是使用if let构造完成,还是仅使用带有可选项的问号完成?全部内容,希望文章能够帮你解决Swift可选链接总是使用if let构造完成,还是仅使用带有可选项的问号完成?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)