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

我想从 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"] 不是有效类型。尝试给出正确的类型。
  • 名称是字符串格式。那么这里有什么问题??

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

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

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

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

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

snapshot.value as? [String : AnyObject]

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

【讨论】: