如何一步一步解开Swift 4+中的可选字典值?

时间:2018-11-23 04:24:45

标签: swift dictionary unwrap

鉴于下面的字典词典,解开Int的正确语法是什么?一步吗?

let dict:Dictionary<String, Dictionary<String, Int?>> = [
"parentKey" : [
    "firstKey" : 1,
    "secondKey" : nil]
]

let x = "someKey"
let y = "someOtherKey"
var foo = 0

if let goo = dict[x]?[y] { foo = goo } //<-- Error: cannot assign (Int?) to Int

if let goo = dict[x]?[y], let boo = goo { foo = boo } //<-- OK

在第一个'if let'中,goo作为Int返回? -那么就需要像第二个“如果让我们那样”解开粘糊糊...

一步执行此操作的正确语法是什么?

3 个答案:

答案 0 :(得分:1)

使用nil彩色标注并提供默认值。安全解开字典值的唯一方法。

if let goo = dict[x]?[y] ?? NSNotFound { foo = goo }  

答案 1 :(得分:1)

据我了解,您想强制展开一个double可选。有不同的方法。

let dbOpt = dict[x]?[y]

我的最爱:

if let goo = dbOpt ?? nil { foo = goo } 

使用flatMap

if let goo = dbOpt.flatMap{$0} { foo = goo } 

使用模式匹配:

if case let goo?? = dbOpt { foo = goo }

答案 2 :(得分:0)

有很多方法可以做到这一点,但是最简单的解决方案之一是:

var foo = 0

if let goo = dict[x]?[y]  as? Int{
    foo = goo
}
print(foo)