【问题标题】:Swift 3.0 Error: Ambiguous reference to member 'subscript' when setting a Dictionary valueSwift 3.0 错误:设置字典值时对成员“下标”的模糊引用
【发布时间】:2017-05-05 07:06:32
【问题描述】:

我在下面有这个方法,它将一个值插入字典。在 Swift 2.x 中,它按原样工作。切换到 Swift 3 时,我收到“对成员'下标'的模糊引用”错误。

谁能帮我理解为什么。谢谢

private func GetNames() -> AnyObject? {
    var returnList : [NSDictionary] = []
    let list = self.Names as! [NSDictionary]
    for name in list {
        var dict : Dictionary<NSObject, AnyObject> = [:]
        dict["id"] = name["id"]      // <-- ******Error*******
        dict["name"] = name["name"]  // <-- ******Error*******
        returnList.append(dict as NSDictionary)
    }
    return returnList as AnyObject
}

【问题讨论】:

  • 那是什么。在名称[“id”]之后?
  • 您是否尝试从 name["id"] 访问元素?那是什么 。在名称[“id”]之后?
  • 那是我输入 // 评论时的错字

标签: swift dictionary swift3


【解决方案1】:

在 Swift 3 中,String 的类型为 Structure,因此它不适用于 NSObject,并且您已声明字典的键类型为 NSObject,这就是您收到该错误的原因。要解决此错误,只需将字典类型更改为 [String:Any] 形式 [NSObject:AnyObject] 即可。

var dict : [String:Any] = [:]

注意:另外在 Swift 中不要使用 NSDictionaryNSArray 使用 Swift 的本机类型字典和数组。

【讨论】:

    【解决方案2】:

    发生错误是因为 Swift 3 需要知道所有以键或索引为下标的类型。

    使用 Foundation 集合类型会适得其反,因为它们缺少编译器所需的类型信息。

    返回一个可选的 AnyObject 而不是独特的(非可选的)[[String:Any]] 也会适得其反。

    解决方案是仅使用(尽可能)特定(尽可能)本机 Swift 类型。

    private func getNames() -> [[String:Any]] {
        var returnList = [[String:Any]]()
        let list = self.Names as! [[String:Any]]
        for name in list {
            var dict = [String:Any]()
            dict["id"] = name["id"]
            dict["name"] = name["name"]
            returnList.append(dict)
        }
        return returnList
    }
    

    swiftier 如果保证 nameid 两个键始终存在

    private func getNames() -> [[String:Any]] {
        let list = Names as! [[String:Any]]
    
        return list.map { ["id" : $0["id"]!, "name" : $0["name"]!]  }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      相关资源
      最近更新 更多