2016-09-15 70 views
1

因此,我使用swift 2完成了一個完美的工程。然後我更新了xcode,並將代碼轉換爲Swift 3。現在,我每次調用快照時都會收到此錯誤。我使用Firebase作爲我的後端。這是我的代碼。swift 3輸入'Any'error

import Foundation 
import Firebase 
import FirebaseDatabase 
import FirebaseAuth 


struct User { 

var username: String! 
var email: String! 
var photoUrl: String! 
var country: String! 
var ref: FIRDatabaseReference? 
var key: String! 


init(snapshot: FIRDataSnapshot){ 

    key = snapshot.key 
    username = snapshot.value!["username"] as! String 
    email = snapshot.value!["email"] as! String 
    photoUrl = snapshot.value!["photoUrl"] as! String 
    country = snapshot.value!["country"] as! String 
    ref = snapshot.ref 

} 




} 

我得到的錯誤是:Type'Any'沒有下標成員。這個錯誤發生在其中有snapshot.value的行上。有沒有人有任何想法如何解決這個問題?

回答

4

什麼是這樣的:

let values = snapshot.value as! Dictionary<String,String> 
username = values["username"] 
... 
+0

這似乎有固定的錯誤!我不得不開始一個新的項目,因爲另一個真的搞砸了,但我讓你知道,當我再次到達那個點時,它是否還會出現!謝謝。 – mavericklab

+0

這是在這種情況下的答案,但價值 - 並不總是字符串。它可能是NSNumber或NSDictionary。 –

1

之前的Xcode 8測試版6個snapshot.values是類型[字符串:AnyObject]。只投它

guard snapshot.exists() else { return } 
let value = snapshot.value as! [String:AnyObject] 
username = value["username"] as! String 
0

的snapshot.value可以是一個字典,數組,字符串,等等。另外,斯威夫特3有一個變化如何表示字典。它從[String:AnyObject]到[String:Any]

做到這一點,正確的方法是,以確保安全地解開這樣的價值觀:

// swift 3  
if let userDict = snapshot.value as? [String:Any] { 
    username = userDict["username"] as? String 
}