• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Swift 3 和 Firebase 观察 child (如果存在)

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:16:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

需要观察我的 Firebase 数据库 中的节点(如果存在)。 enter image description here

我使用的代码是这样的:

 var COLOR_REF = Database.database().reference().child("Colors")

self.COLOR_REF.child(id).observe(.childAdded) { (snapshot) in
                let key = snapshot.key
                Api.Post.getMyPosts(withId: key, completion: { (post) in
                    completion(post)
                })
            }

id 可能存在也可能不存在... 我需要的是进行观察

  if child(id) exist else do something else.

有没有办法在一次观察中做到这一点,或者我需要观察 COLOR_REF 然后如果 id 存在观察 child ?

谢谢! - - - - - - - - - - - - - - - 更新 根据图片可以说我的 id 是:

D7CGNLehdjksnjkdsiwgqauymj3 我像这样进行观察:

COLOR_REF.child(id).observe(.childAdded) { (snapshot) in
if snapshot.exists() {
print("YES")
} else {
print("No")
}
 let key = snapshot.key
  Api.Post.getMyPosts(withId: key, completion: { (post) in
  completion(post)
     })
   }

因此假设 id 在我执行观察时控制台既不打印“YES”也不打印“NO”。所以基本上它似乎永远不会进入观察者

------------------第二次更新 这是我现在的做法:

func observeFeed(withUserId id: String, completion: @escaping (Post) -> Void, isEmpty: @escaping () -> Void) {
    COLORS_REF.observe(.value) { (snapshot) in
        if snapshot.hasChild(id) {
            self.COLORS_REF.child(id).observe(.childAdded) { (snapshot) in
                let key = snapshot.key
                Api.Post.getMyPosts(withId: key, completion: { (post) in
                    completion(post)
                })
            }
        } else {
            isEmpty()
        }
    }
}

就像这样工作......我确实在完成后将所有内容存储在一个数组中。我的问题是,如果这是用户第一次登录,那么数据库的那部分将是空的。 所以我想知道是否有一种方法可以在不必使用双重观察者的情况下实现这一目标......



Best Answer-推荐答案


您可以通过检查 snapshot.exists() 在这样的观察上是否返回 true 或 false 来检查 id 是否存在:

    self.COLOR_REF.child(id).observe(.childAdded) { (snapshot) in
            if snapshot.exists() {
               //the id is valid
            }
            else {
                //the id is not there. do something else
             }

    }) { (error) in

        print(error.localizedDescription)

        //snapshot might have been nil, or there was no id or security rules denied permission to read. do something else.

    }

关于ios - Swift 3 和 Firebase 观察 child (如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47218041/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap