我有一个代码部分:
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)) ?? ""发布于 2017-07-01 17:12:51
您可以这样做,但是您的strValue应该是可选类型。
let strValue:String?
textfield.stringValue = strValue ?? "your default value here"发布于 2017-07-01 18:27:32
??是一个零聚的操作符,我也有点理解了.不过,它是简化代码的有用工具。一个简单的解释是“除非是零,否则这个”,所以a ?? b返回a (如果它有值)和b (如果没有),您可以将它们链接在一起并返回第一个非零值。例如,a ?? b ?? c ?? d ?? e返回第一个非零值,如果它们在其前面都为零,则返回e。
发布于 2019-05-23 11:14:29
使用0-煤焦操作符,我们可以避免使用代码来展开和清理代码。
若要在可选值为零时提供简单默认值:
let name : String? = "My name"
let namevalue = name ?? "No name"
print(namevalue)这里需要注意的是,如果让或在这里保护,则不需要使用展开它,它将被隐式地打开,但是安全的。
此外,让代码更简洁、更简洁也很有用:
do {
let text = try String(contentsOf: fileURL, encoding: .utf8)
}
catch {print("error")}上面的代码可以写成:
let text = (try? String(contentsOf: fileURL, encoding: .utf8)) ?? "Error reading file"https://stackoverflow.com/questions/44863431
复制相似问题