Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何知道可选链接在哪里断开?_Swift_Optional - Fatal编程技术网

Swift 如何知道可选链接在哪里断开?

Swift 如何知道可选链接在哪里断开?,swift,optional,Swift,Optional,因此,在iOS Swift中,我们可以进行可选链接,以简化 我了解在john.residence?.address?.street中可选链接的用法,但我们如何知道链接实际在哪里断开(如果residence或address为nil)。我们是否可以确定住所或地址是否为零,或者我们是否需要使用再次检查它,否则 我不这么认为。可选链接是一种方便的快捷语法,只需按几个键,您就可以放弃一些控制 如果你真的需要知道链的确切断裂位置,你必须一个接一个地链接到多个变量中。那么不要做链。只有当你不想停下来的时候,这

因此,在iOS Swift中,我们可以进行可选链接,以简化


我了解在
john.residence?.address?.street
中可选链接的用法,但我们如何知道链接实际在哪里断开(如果
residence
address
nil
)。我们是否可以确定
住所
地址
是否为
,或者我们是否需要使用
再次检查它,否则

我不这么认为。可选链接是一种方便的快捷语法,只需按几个键,您就可以放弃一些控制


如果你真的需要知道链的确切断裂位置,你必须一个接一个地链接到多个变量中。

那么不要做链。只有当你不想停下来的时候,这个链条才有意思。如果你这样做了,在有趣的地方把它分解——否则,你会把坏情况的代码放在哪里

if let residence = john.residence {
  if let address = residence.address {
    ...
  } else {
    println("missing address")
  }
} else {
  println("missing residence")
}

无法判断可选链接停止的位置。但是,您可以使用:

if let johnsStreet = john.residence?.address?.street {
    println("John's street name is \(johnsStreet).")
} else if let johnAddress = john.residence?.address {
    println("Unable to retreive street, but John's address is \(johnAddress).")
} else {
    println("Unable to retrieve the address.")
} 

可选链接的全部要点是,该值在任何点都可能是
nil
。如果您需要知道,那么可选链接对于您的代码来说不是一个好的选择。@BenjaminGruenbaum很好的参数!谢谢
if let johnsStreet = john.residence?.address?.street {
    println("John's street name is \(johnsStreet).")
} else if let johnAddress = john.residence?.address {
    println("Unable to retreive street, but John's address is \(johnAddress).")
} else {
    println("Unable to retrieve the address.")
}