为firebase数据库创建用户对象时类型“Any”没有下标成员

时间:2017-12-15 09:12:33

标签: ios swift firebase firebase-realtime-database

我想从firebase中检索数据。我为用户创建了一个结构。但我在init方法中遇到错误

  

类型'Any'没有下标成员

struct userObj {
    var address:String!
    var name: String!
    var userId: String!
    var ref: DatabaseReference?
    var key: String!

    init(snapshot: DataSnapshot) {
        key = snapshot.key
        name = snapshot.value!["name"] as! String   // this line give error
        address = snapshot.value!["address"] as! String // this line give error
        userId = snapshot.value!["userId"] as! String // this line give error
        ref = snapshot.ref
    }
}

1 个答案:

答案 0 :(得分:1)

DataSnapshot.value属性声明为var value: Any? { get }

它没有显式声明为字典类型,但它可能包含其他可能类型的字典

  • 的NSDictionary
  • 的NSArray
  • NSNumber(也包括布尔值)
  • 的NSString

在您可以访问字典之前(如果您知道有字典),您必须对其进行类型转换以获取您可以使用的实际字典:

snapshot.value as? [String : AnyObject]

请注意,如果没有合适类型的适当数据,那么使用!显式展开选项会崩溃。