Swift 3.0错误:对成员的引用不明确';下标';设置字典值时
下面有一个方法,它将一个值插入到字典中。在Swift 2.x中,它按原样工作。当切换到Swift 3时,我得到了“对成员'subscript'的不明确引用”错误 有人能帮我理解为什么吗。谢谢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 {
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”]之后?我在//注释中输入时,这是一个输入错误