swift 3 类型 'Any' 错误

swift 3 Type 'Any' error

所以我有一个使用 swift 的完美工作项目 2. 然后我更新了 xcode 并将代码转换为 Swift 3. 现在我每次调用时都会收到此错误快照。我使用 Firebase 作为我的后端。这是我的代码。

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

}




}

我收到以下错误:类型 'Any' 没有下标成员。此错误出现在其中包含 snapshot.value 的行上。有谁知道如何解决这个问题?

比如:

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

在 Xcode 8 beta 6 snapshot.values 之前是 [String:AnyObject] 类型。随便投一下

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

snapshot.value 可以是字典、数组、字符串等。此外,在 Swift 3 中,对如何表示字典进行了更改。它从 [String:AnyObject] 变为 [String:Any]

执行此操作的正确方法是确保像这样安全地解包所有值:

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