Swift可选链接总是使用if let构造完成,还是仅使用带有可选项的问号完成?

Swift可选链接总是使用if let构造完成,还是仅使用带有可选项的问号完成?,第1张

概述根据Apple文档,可选链接如下: 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 根据Apple文档,可选链接如下:

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构造完成,还是仅使用带有可选项的问号完成?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1012890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存