无法转换类型的值' NSDictionary.Iterator.Element' (又名'(关键:任意,价值:任何)')预期参数类型' NSDictionary'

时间:2017-02-24 13:31:29

标签: ios swift

enter image description here我在第7行遇到错误,并且#34;无法转换类型的值' NSDictionary.Iterator.Element' (又名'(关键:任意,价值:任何)')预期参数类型' NSDictionary'"。

    init(snapshot: FIRDataSnapshot) {
    key = snapshot.key
    ref = snapshot.ref
    let snapshotValue = snapshot.value as! [String: AnyObject]

    if (snapshotValue["visitor"] != nil) {
        for item in snapshotValue["visitor"] as! NSDictionary {
            visitor = UserVisitor.init(visitorData: item)
        }
    }

2 个答案:

答案 0 :(得分:0)

snapshotValue["visitor"]显然是一个数组,因此将其强制转换为包含字典的Swift数组:

if let visitors = snapshotValue["visitor"] as? [[String:Any]] {
    for item in visitors {
        visitor = UserVisitor(visitorData: item)
    }
}

答案 1 :(得分:0)

尝试这样的纯Swift方法:

// snapshotValue is a dictionary
if let snapshotValue = snapshot.value as? [String:Any] {
    // The content of the "visitor" key is a dictionary of dictionaries
    if let visitorDictionary = snapshotValue["visitor"] as? [String:[String:Any]] {
        for (visitorId, visitorData) in visitorDictionary {
            // This assumes that your initializer for UserVisitor is
            // init(visitorData: [String:Any]) { ... }
            visitor = UserVisitor.init(visitorData: visitorData)
        }
    }
}

除非您确实需要,否则请勿尝试使用NSDictionaryNSArray。 Native Swift类型在Swift中工作得更好......

您可以编写else语句来处理不符合预期格式的数据。