【问题标题】:Swift if value is nil set default value insteadSwift 如果值为 nil 则设置默认值
【发布时间】:2017-12-05 09:58:26
【问题描述】:

我有这个代码部分:

let strValue = String()
textfield.stringValue = strValue!

问题是strValue可以为nil。

为此,我这样检查:

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

【问题讨论】:

  • 你的意思是nil还是空字符串""
  • nil 合并运算符简洁地完成了这项工作:textField.stringValue = strValue ?? ""
  • 可能是Providing a default value for an Optional in Swift? 的副本,但您的问题没有意义,因为strValue 不是可选的。
  • 您的 代码部分 无法编译,因为 strValue 显然是非可选的。

标签: swift


【解决方案1】:

您可以创建可选的字符串扩展名。如果它是 nil 并且它可以工作,我执行了以下操作以将可选字符串设置为空:

extension Optional where Wrapped == String {

    mutating func setToEmptyIfNil() {
        guard self != nil else {
            self = ""
            return
        }
    }

}

【讨论】:

    【解决方案2】:

    使用 nil-coaleasing 运算符,我们可以避免代码解包和清理代码。

    当可选项为 nil 时提供简单的默认值:

    let name : String? = "My name"
    let namevalue = name ?? "No name"
    print(namevalue)
    

    这里要注意的重要一点是,您不需要在此处使用 if letguard 将其解包,它将隐式解包但安全。

    让你的代码更简洁更简洁也很有用:

       do {
            let text = try String(contentsOf: fileURL, encoding: .utf8)
        }
        catch {print("error")}
    

    上面的代码可以写成:

    let text = (try? String(contentsOf: fileURL, encoding: .utf8)) ?? "Error reading file"
    

    【讨论】:

    • 如果 ?? 后面的部分怎么办?需要几行代码?
    【解决方案3】:

    ?? 是 nil-coalescing 运算符,我也花了一点时间理解。虽然它是简化代码的有用工具。一个简单的解释是“除非它是 nil,那么这个”,所以 a ?? b 如果它有一个值,则返回 a,如果没有,则返回 b。您可以将它们链接在一起并返回第一个非零值。例如,a ?? b ?? c ?? d ?? e 返回第一个非 nil 值,或者 e 如果它们之前都是 nil。

    Nil-Coalescing Operator

    【讨论】:

      【解决方案4】:

      你可以这样做,但你的 strValue 应该是可选类型

      let strValue:String?
      textfield.stringValue = strValue ?? "your default value here"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-02
        • 2012-07-22
        • 2013-03-23
        • 2012-11-25
        • 1970-01-01
        • 2016-09-01
        • 2022-06-19
        • 2020-03-19
        相关资源
        最近更新 更多