我已经习惯了与Python的defaultdicts模式是一个字典,如果没有明确设置给定键的值,它将返回一个默认值。试图在Swift中做这个有点冗长。Swift字典默认值
var dict = Dictionary<String, Array<Int>>()
let key = "foo"
var value: Array<Int>! = dict[key]
if value == nil {
value = Array<Int>()
dict[key] = value
}
我知道我可以做一个类,这样做,但后来实际字典必须通过属性来访问使用任何其他正常字典方法
class DefaultDictionary<A: Hashable, B> {
let defaultFunc:() -> B
var dict = Dictionary<A, B>()
init(defaultFunc:() -> B) {
self.defaultFunc = defaultFunc
}
subscript(key: A) -> B {
get {
var value: B! = dict[key]
if value == nil {
value = defaultFunc()
dict[key] = value
}
return value
}
set {
dict[key] = newValue
}
}
}
有没有更好的这样的模式?
你可以使用nil-coalescing运算符''',就像这样:'var value:Array = dict [key] ?? []' –
@TheParamagneticCroissant这将分配所需的值给变量,但不会更新词典 – alexp
然后写'dict [key] = dict [key] ?? []',然后你可以强制解开'dict [key]'。 –