【问题标题】:When in swift 3.0 nil coalescing used, didn't get expected result在使用 swift 3.0 nil 合并时,没有得到预期的结果
【发布时间】:2016-10-18 13:28:00
【问题描述】:

在下面的代码中实现,如果我的字典没有键“key1”,那么 value1 应该用空白字典 [:] 初始化,代码执行但永远不会进入 if-let 块。

建议正确的解决方案,以防我以错误的方式使用 nil 合并

if let value1 = ((dataDict["key1"] as? Dictionary<String,Any>?) ?? [:]){
print(value1) 
}

【问题讨论】:

    标签: swift3 null-coalescing-operator


    【解决方案1】:

    没有必要将if - let 与 nil 合并运算符一起使用

    let value1 : Dictionary<String,Any> = dataDict["key1"] as? Dictionary<String,Any> ?? [:]
    print(value1) 
    

    或更短的

    let value1 = dataDict["key1"] as? [String:Any] ?? [String:Any]()
    

    【讨论】:

    • 甚至更短:let value1 = dataDict["key1"] as? [String:Any] ?? [:]
    • @vadian,你能否解释一下为什么我们不能同时使用 if-let 和 nil 合并,就像在我的实现中,如果我知道这个“dataDict [”key1“]”有可能为 nil 然后在 if-let 语句本身中我想分配空白字典。它在那里不工作
    • 实际上 nil 合并操作符执行if - let。如果键 key1 不存在或值不是 [String:Any] ,则空(非可选)字典将分配给变量,否则为 unwrapped(!) 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多