Firebase iOS Swift反向收藏列表,包含来自其他节点的数据

时间:2017-04-23 12:47:09

标签: ios swift firebase firebase-realtime-database

Pictures
-pictureID
-- name
-- date

Like
-pictureID
-- userID: true
-- userID: true

likePerUser
-userID
--pictureID: true
--pictureID: true

Users
-userID
-- name
-- lastname

我想检索当前用户喜欢的所有图片。

我做了:

          ref.child("likePerUser").child(FIRAuth.auth()!.currentUser!.uid).observeSingleEvent(of: .value, with: { (snap) in

      for item1 in snap.children{

      let firstItem1 = (snap: item1 as! FIRDataSnapshot)
          print("key favourites\(firstItem1.key)")

           let firstId = firstItem1.key


   self.ref.child("pictures").child(firstId).observeSingleEvent(of: .value, with: { (snapshot) in



    for item in snapshot.children{

      let firstItem = (snapshot: item as! FIRDataSnapshot)
      print("key pictures \(firstItem.key)")
               let dict = firstItem.value as! [String: Any
                   let name = dict["name"] as! String 
 print(name)

    }

甚至,如果看起来firstId每次都有正确的价值, 我总是收到错误:

  

无法将类型'__NSCFBoolean'(0x110dae5b8)的值转换为   'NSDictionary'(0x110daf288)。

请帮忙......

2 个答案:

答案 0 :(得分:1)

我解决了这个问题:

if let dictionary = snapshot.value as? NSDictionary {

            if let name = dictionary["nome"] as? String {
                print(name)
            }
}

这些问题帮助了我:Swift - Could not cast value of type '__NSCFString' to 'NSDictionary'

此外,我不需要再次迭代。

答案 1 :(得分:0)

let dict = firstItem.value as! [String: Any

这是您尝试将值转换为字典的位置。目前还不清楚该值是否是基于您共享的数据库模型的字典。但是,如果你打印firstItem.value.debugDescription,你很可能会发现它不是一个字典对象。