为firebase数据库创建用户对象时,类型“任何”没有下标成员[重复]

Posted

技术标签:

【中文标题】为firebase数据库创建用户对象时,类型“任何”没有下标成员[重复]【英文标题】:when creating user object for firebase database Type 'Any' has no subscript members [duplicate] 【发布时间】:2017-12-15 09:12:33 【问题描述】:

我想从 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
    

【问题讨论】:

当然 snapshot.value!["name"] 不是有效类型。尝试给出正确的类型。 名称是字符串格式。那么这里有什么问题?? 【参考方案1】:

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

它没有明确声明为字典类型,但它可能包含字典以及其他可能的类型

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

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

snapshot.value as? [String : AnyObject]

请注意,如果没有适当类型的适当数据,使用! 显式解包选项将会崩溃。

【讨论】:

以上是关于为firebase数据库创建用户对象时,类型“任何”没有下标成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase RTD 获取数据时获取 null

将 Firebase 用户对象传递给新组件

仅向firebase中的一个用户发送通知[关闭]

具有多个不同类型来源的 LiveData

Firebase无需登录即可创建用户[重复]

Firebase Auth iOS用户匿名创建但未在控制台中显示