2017-02-24 46 views
-1

enter image description here我在第7行遇到錯誤,它給出「無法轉換值類型'NSDictionary.Iterator.Element'(aka'(key:Any,value:Any)')到期望的參數類型'NSDictionary'「。無法將類型'NSDictionary.Iterator.Element'(aka'(key:Any,value:Any)')的值轉換爲期望的參數類型'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) 
     } 
    } 
+0

如何定義'snapshotValue'? – deadbeef

+0

另外,你應該可以編寫Swift而不必轉換成'NSDictionary'。嘗試刪除'as! NSDictionary'擺在首位。 – deadbeef

+0

@deadbeef當我刪除它給出這個錯誤「Type'AnyObject?'不符合協議'序列'「 –

回答

0

嘗試這樣的純夫特的方法:

// 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除非你真的需要。原生Swift類型在Swift中效果更好...

您可以編寫else語句來處理未處於預期格式的數據。

+0

@ rahul-gupta我剛剛解決了我的答案中有一個錯誤。 – deadbeef

0

snapshotValue["visitor"]顯然是一個陣列,以便將它轉換爲夫特含陣列字典:

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