【问题标题】:fetch data from firebase swift从 firebase swift 获取数据
【发布时间】:2017-02-25 17:33:45
【问题描述】:

我正在尝试从我的 firebase 数据库中接收所有用户的全名,我目前正在做这样的事情:

ref.observeSingleEvent(of: .value, with: { (snapshot) in
  if let dictionary = snapshot.value as? [String: AnyObject] {
    let friend = FriendsModel()
  
    friend.fullname = dictionary["fullname"] as! String?
    friend.email = dictionary["email"] as! String?
    friend.birthDate = dictionary["Birth date"] as! String?
                
    friend.provider = dictionary["provider"] as! String?
                
    print(friend.fullname)
  }
})

但是 postDict["fullname"] 返回 nil。

firebase 数据库的图片: Firebase Database

func fetchUsers () {
  ref.observeSingleEvent(of:.value, with: { snapshots in
  if  snapshots.exists() {
     guard let snapshot = snapshots.children.allObjects as?    [FIRDataSnapshot] else { return }
      for eachSnap in snapshot {
        guard let eachUserDict = snapshots.value as? Dictionary<String,AnyObject> else { return }
        // eachUserDict is an object/ dictionary representation for each user
        //this prints all the information of the users
        print (eachUserDict)
        let fullName = eachUserDict["fullname"] as? String
        //this returns nil :(
        print(fullName)
      }
    }
  })
}

这是我收到的图片: enter image description here

【问题讨论】:

  • 添加来自 firebase 的图片
  • 现在帖子上有数据库的图片和here
  • 您是为整个对象获取nil 还是仅获取键 fullName ?
  • 整个项目

标签: swift firebase firebase-realtime-database


【解决方案1】:

我认为你没有告诉ref 在哪里观察。改变这一行

  ref.observeSingleEvent(of: .value, with: { (snapshot) in

    guard let id = FIRAuth.auth()?.currentUser?.uid else {return}
    ref.child("users").child(id).observeSingleEvent(of: .value) {  (snapshots) in

更新: 如果您想获取所有用户的全名,请尝试以下操作:

ref.child("users").observeSingleEvent(of:.value) { snapshots in 
        if  snapshots.exists() {
            guard let snapshot = snapshots.children.allObjects as? [FIRDataSnapshot] else { return }
     for eachSnap in snapshot {
         guard let eachUserDict = snap.value as? Dictionary<String,AnyObject> else { return }
      // eachUserDict is an object/ dictionary representation for each user
              let fullName = eachUserDict["fullName"] as? String 
    }
}

【讨论】:

  • 很抱歉,我插入了错误的代码,我已经更新了问题,顺便说一句,我有一个孩子(名为“用户”),它有 4 个子类(全名、电子邮件、生日和提供者(提供者是 Facebook 或电子邮件))。
  • 但这只返回当前用户全名,我接收所有用户全名,而不仅仅是当前用户。你知道怎么做@Lamar 吗??
  • 我已经更新了问题。现在我从所有用户那里获取所有信息,但是当我尝试获取所有用户的名称时,它返回 nil
  • 你说你得到了所有的信息,你说它是零吧?
  • 当我打印“eachUserDict”时它返回所有用户的所有数据,但是当我打印“fullname”它返回nil时,你可以看到this是它在xcode consel中返回的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多