Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3.0错误:对成员的引用不明确';下标';设置字典值时_Swift_Dictionary_Swift3 - Fatal编程技术网

Swift 3.0错误:对成员的引用不明确';下标';设置字典值时

Swift 3.0错误:对成员的引用不明确';下标';设置字典值时,swift,dictionary,swift3,Swift,Dictionary,Swift3,下面有一个方法,它将一个值插入到字典中。在Swift 2.x中,它按原样工作。当切换到Swift 3时,我得到了“对成员'subscript'的不明确引用”错误 有人能帮我理解为什么吗。谢谢 private func GetNames() -> AnyObject? { var returnList : [NSDictionary] = [] let list = self.Names as! [NSDictionary] for name in list {

下面有一个方法,它将一个值插入到字典中。在Swift 2.x中,它按原样工作。当切换到Swift 3时,我得到了“对成员'subscript'的不明确引用”错误

有人能帮我理解为什么吗。谢谢

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
}
private func GetNames()->AnyObject?{
var returnList:[NSDictionary]=[]
let list=self.Names as![NSDictionary]
名单上的名字{
变量dict:Dictionary=[:]

Swift 3中的dict[“id”]=name[“id”]/字符串是
结构的类型,因此它不能与
NSObject
一起使用,并且您已声明字典的键类型是
NSObject
,这就是您出现该错误的原因。要解决该错误,只需将字典的类型更改为
[String:Any]
表单
[NSObject:AnyObject]
然后您就可以开始了

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

注意:同样在Swift中,不要使用
NSDictionary
NSArray
使用Swift的本机类型字典和数组。

发生错误是因为Swift 3需要知道由键或索引订阅的所有类型

使用基础集合类型是适得其反的,因为它们缺少编译器需要的类型信息。 返回可选的

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
}
或者,如果保证
name
id
两个键始终存在,则更快捷

private func getNames() -> [[String:Any]] {
    let list = Names as! [[String:Any]]

    return list.map { ["id" : $0["id"]!, "name" : $0["name"]!]  }
}

那是什么。在名称[“id”]之后?你是否试图从名称[“id”]访问元素?那是什么。在名称[“id”]之后?我在//注释中输入时,这是一个输入错误