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
}
所以我有一个使用 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
}