【问题标题】:Extension on swift mutable dictionary快速可变字典的扩展
【发布时间】:2017-09-22 19:06:25
【问题描述】:

我正在尝试在 [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" 转换为 Key,我会收到另一个错误:

mutating func addSomething() {
    let key = "ExampleKey" as! Key
    // Error: Ambiguous reference to member 'subscript'
    self[key] = "ExampleValue"
}    

仍在研究如何让这个简单的补充工作......

【问题讨论】:

  • 问题是什么?
  • 或邮政编码不起作用...
  • 或回复有关您的问题的活动...很乐意提供帮助,我相信如果您改进问题,反对者会很乐意投票

标签: swift dictionary


【解决方案1】:

这行得通

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")

【讨论】:

  • 是的! Value 的演员阵容是我所缺少的。谢谢。
【解决方案2】:

对于 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
  }
}

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多