通过使用关键字subscript
而不是关键字func
声明新方法,可以创建自定义子脚本.
根据您的要求,您似乎只需要您的自定义下标具有一个getter,而不需要为它设置一个setter-您可以使用默认的setter来设置值.
extension Dictionary {
/// Subscript which returns the previously set `Value` for `key` in case such value exists.
/// Otherwise, sets `defaultValue` as the value for `key` and returns `defaultValue`.
subscript(_ key: Key, defaultValue defaultValue: Value) -> Value {
mutating get {
// In case the dictionary already contained a value for key, return the existing value
if let value = self[key] {
return value
} else { // Otherwise, set the key to have defaultValue as its value and return defaultValue
self[key] = defaultValue
return defaultValue
}
}
}
}
使用示例:
let defaultValue = "default"
var dict = [Int:String]()
dict[0] = "0"
dict[2] = "2"
let valueFor1 = dict[1, defaultValue: defaultValue] // "default"
print(dict) // [0: "0", 1: "default", 2: "2"]
dict[2, defaultValue: defaultValue] // this returns 2 as the key had a previously set value