我有这个代码部分:
let strValue = String()
textfield.stringValue = strValue!
问题是strValue
可以是零。
为此,我这样检查:
if strValues.isEmpty() {
textfield.stringValue = ""
} else {
textfield.stringValue = strValue!
}
但我有一种更快捷,更简单的方法吗?
我读了??
之类的内容来解决它。但我不知道如何使用它?
更新 非常感谢许多反馈。 现在我不知道了?运营商,但我是如何在这种情况下实现的呢?
let person = PeoplePicker.selectedRecords as! [ABPerson]
let address = person[0].value(forProperty: kABAddressProperty) as?
ABMultiValue
txtStreet.stringValue = (((address?.value(at: 0) as! NSMutableDictionary).value(forKey: kABAddressStreetKey) as! String))
我该怎么用?运算符在我的代码的最后一行?
更新2 好的,我明白了!
txtStreet.stringValue = (((adresse?.value(at: 0) as? NSMutableDictionary)?.value(forKey: kABAddressStreetKey) as? String)) ?? ""
答案 0 :(得分:10)
你可以这样做但你的strValue应该是可选类型
let strValue:String?
textfield.stringValue = strValue ?? "your default value here"
答案 1 :(得分:2)
??
是零合并算子,也让我有点理解。它是一个简化代码的有用工具。对它的一个简单解释是“除非那是零,然后这个”所以a ?? b
如果有值则返回a
,如果没有则返回b
。您可以将它们链接在一起并返回第一个非零值。例如,a ?? b ?? c ?? d ?? e
返回第一个非零值,如果它们之前都是零,则返回e
。
答案 2 :(得分:1)
您可以创建一个可选的字符串扩展名。我进行了以下操作,以将可选字符串设置为空(如果为nil并且可以正常工作):
extension Optional where Wrapped == String {
mutating func setToEmptyIfNil() {
guard self != nil else {
self = ""
return
}
}
}
答案 3 :(得分:0)
使用零合并运算符,我们可以避免代码拆包和清除代码。
当可选参数为nil时,提供简单的默认值:
let name : String? = "My name"
let namevalue = name ?? "No name"
print(namevalue)
此处要注意的重要事项是,您无需在此处使用 或 guard 对其进行解包,这将隐式解包但很安全< / strong>。
另外,使代码更简洁明了也很有用:
do {
let text = try String(contentsOf: fileURL, encoding: .utf8)
}
catch {print("error")}
以上代码可以写为:
let text = (try? String(contentsOf: fileURL, encoding: .utf8)) ?? "Error reading file"