swift - 无法从 Firebase 获取值(value)

标签 swift firebase firebase-realtime-database

我试图在我设置的 Firebase 数据库中获取一个值,但我在尝试获取它时遇到了问题。在我的程序中有一个部分,我遍历 Cities 下的每个 child 并获取每个城市的名称。我认为尝试获取同一部分中每个城市的状态是个好主意,但我无法获取。下面是 JSON 对象的示例。我觉得我很接近但缺少将它们放在一起的东西。

"Users" : {
    "NPNBig20BXNpX4Rz0UbMyiKAarY2" : {
      "Cities" : {
        "New York City" : {
          "Status" : "Empty"
        },
        "Atlanta" : {
          "Status" : "Empty"
        },
        "Test City" : {
          "Status" : "Wow",
          "Value" : "Test"
        }
      },
      "Email" : "fakeemail@gmail.com"
    }
  }

代码:

guard let uid = userID else { return }
    let databaseRef = Database.database().reference(fromURL: "https://testApp.firebaseio.com/").child("Users").child(uid).child("Cities")
    var dataTest : [String] = []
    //var cityDictionary: [String:String]()
    databaseRef.observeSingleEvent(of: .value, with: {(snapshot) in
        for child in snapshot.children {
            let snap = child as! DataSnapshot
            let key = snap.key
            guard let value = snap.value else { return }
            //let testData = value["Status"] **Type Any has no subscript
            print("Key: ", key, "\nValue: ", value)
            dataTest.append(key)
        }
        completion(dataTest)
    })

这是打印输出

Key:  New York City 
Value:  {
    Status = Empty;
}
Key:  Sintra 
Value:  {
    Status = Empty;
}
Key:  Test City 
Value:  {
    Status = Wow;
    Value = Test;
}

最佳答案

以下是您可以从获取Status的方法:

if let value = snap.value as? [String: AnyObject] {
    let Status = value["Status"] as? String ?? ""
}

你的完整代码将是:

guard let uid = userID else { return }
    let databaseRef = Database.database().reference(fromURL: "https://testApp.firebaseio.com/").child("Users").child(uid).child("Cities")
    var dataTest : [String] = []
    //var cityDictionary: [String:String]()
    databaseRef.observeSingleEvent(of: .value, with: {(snapshot) in
        for child in snapshot.children {
            let snap = child as! DataSnapshot
            let key = snap.key
            guard let value = snap.value else { return }
            //let testData = value["Status"] **Type Any has no subscript
            if let value = snap.value as? [String: AnyObject] {
                let Status = value["Status"] as? String ?? ""
            }
            print("Key: ", key, "\nValue: ", value)
            dataTest.append(key)
        }
        completion(dataTest)
    })

关于swift - 无法从 Firebase 获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065420/

相关文章:

javascript - 测试 AngularFireAuth Wrapper,不使用 AngularFireAuth 模拟

rest - 使用 Firebase 3 创建 API

javascript - 使用 Firebase、React-Native、Redux 进行数据库 .on 调用的约定?

swift - Firebase 获取特定父项而不是所有子项 SWIFT

javascript - 在 onwrite 事件中查询 firebase 数据库

ios - 区分触摸计数SKSpriteNode

ios - 将 CollectionView 照片传递到电子邮件附件 iOS swift

swift - Firebase 数据库通过特定 ID 中的子字符串进行查询

ios - 从另一个 View Controller swift 3 解雇到家

javascript - 如何过滤来自 Firestore 数据库的数据