'(key:AnyObject,value:AnyObject)'没有名为'subscript'的成员

Jim*_*ery 2 swift

我有类似这个问题的问题,但那里的答案没有帮助我.

我有这些代码行:

var id = item["id"] as? String ?? ""
var name = item["name"] as? String ?? ""
var pic = item["pic"] as? String ?? ""
Run Code Online (Sandbox Code Playgroud)

对我来说,这些代码行几乎相同.对于Xcode,这是另一回事.

第一行很好.后两行产生此错误:

'(key: AnyObject, value: AnyObject)' does not have a member named 'subscript'
Run Code Online (Sandbox Code Playgroud)

这里有一些更适合你的背景:

class func getFromJson(json:NSDictionary) -> [Collection] {
    var collections = [Collection]()
    if json.count > 0 {
        for item in json {
            var id = item["id"] as? String ?? ""
            var name = item["name"] as? String ?? ""
            var pic = item["pic"] as? String ?? ""
            var newUser = Collection(id:id, name:name, pic:pic)
            collections.append(newUser)
        }
    }
    return collections
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释如何解决这个问题.如果你可以解释为什么第一行是好的,但是接下来的两条几乎相同的线会产生错误!

提前致谢.

Kry*_*ski 12

'(key: AnyObject, value: AnyObject)'表示它item不是字典,而是具有单个键/值对的元组.

通过元组在快速交互中迭代字典:

for (key, value) in json {
    println(key, value)
}
Run Code Online (Sandbox Code Playgroud)

你的for循环表明你可能想要一个json数组的元组而不是一个json字典.

如果将参数声明为元组,则item ["id"]会给出编译时错误.看起来你偶然发现隐藏在语言中的东西与元组或下标如何在幕后工作.

有关下标的更多信息

更多关于类型(元组)