我正在尝试在类型[NSObject:AnyObject]
以下是Swift中[NSObject:AnyObject]
的不可变字典扩展的语法:
extension Dictionary where Key:NSObject, Value:AnyObject {
func addSomething() {
// Fails
self["ExampleKey"] = "ExampleValue"
}
}
但是,在这种情况下,self
无法追加,因为扩展名适用于不可变字典。问题是缺少什么语法才能对可变字典进行扩展。
编辑:已更新以解决歧义
更新:
通过将mutating
前缀添加到addSomething
,我只能操作可变的字典。好极了!但是,该功能仍无法正常工作
mutating func addSomething() {
// Error: Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String'
self["ExampleKey"] = "ExampleValue"
}
如果我将"ExampleKey"
转换为密钥,我会收到另一个错误:
mutating func addSomething() {
let key = "ExampleKey" as! Key
// Error: Ambiguous reference to member 'subscript'
self[key] = "ExampleValue"
}
还在研究如何让这个简单的加法工作......
答案 0 :(得分:4)
这有效
extension Dictionary where Key:NSObject, Value:AnyObject {
mutating func addSomething(forKey key:Key, value: Value) {
self[key] = value
}
}
var dict = [NSString:NSString]()
dict.addSomething(forKey: "test", value: "some test")
答案 1 :(得分:0)
对于Swift 3+我正在使用此扩展程序:
extension Dictionary where Key == String, Value == Any {
mutating func set(value optionalValue: Any?, forKey key: String) {
guard let value = optionalValue else { return }
self[key] = value
}
}
干杯!