gpt4 book ai didi

swift - 一步可选链接?

转载 作者:搜寻专家 更新时间:2023-11-01 06:18:30 25 4
gpt4 key购买 nike

为什么这样做(示例 1):

if let numString:String = Model.selectedLocation?.zip{
let callString:String = String(format:"tel:%@",numString)
//more code here
}

但不是这个(示例 2):

if let numString:String = String(format:"tel:%@",Model.selectedLocation?.zip){
//more code here
}

在第二个示例中,Xcode 抛出错误并希望 zip 像这样解包: String(格式:"tel:%@",(Model.selectedLocation?.zip)!)
但如果我这样做,当 zip 为 nil 时应用程序将崩溃。

问题:有没有办法使上面的第二个示例工作或者不可能/不正确?

最佳答案

  1. 避免冗余类型注释
  2. 除非您需要,否则请避免使用 String(format:)。它是 Foundation 框架中 NSString 的一个方法,它有几个结果:
    1. 需要导入Foundation
    2. 它隐式地将您的 String 桥接到 NSString
    3. 它在 Swift 3 中不起作用,因为桥接是明确的。

这里的根本问题是 String(format:) 返回 String?(因为格式字符串可能无效)。您可以通过使用 Swift 的字符串插值来完全避免这种情况:

if let numString = Model.selectedLocation?.zip {
let callString = "tel: \(numString)"
//more code here
}

...或简单的连接:

if let numString = Model.selectedLocation?.zip {
let callString = "tel: " + numString
//more code here
}

关于swift - 一步可选链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39003267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com