如果值为nil设置为默认值而不是

时间:2017-07-01 17:00:27

标签: swift

我有这个代码部分:

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)) ?? ""

4 个答案:

答案 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

Nil-Coalescing Operator

答案 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"