鉴于下面的字典词典,解开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返回? -那么就需要像第二个“如果让我们那样”解开粘糊糊...
一步执行此操作的正确语法是什么?
答案 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)