我使用的代码是:
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存在,请观察孩子?
谢谢! -----------------------------更新 根据图片,我可以说我的身份是:
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,控制台不会打印"是"也不是" 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()
}
}
}
就像这样工作......我会在完成后将所有内容存储在一个数组中。我的问题是,如果它是第一次用户登录数据库的那一部分将是空的。 所以我想知道是否有办法实现这一目标而不必使用双重观察者......
答案 0 :(得分:0)
您可以通过检查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.
}
答案 1 :(得分:0)
像这样你问? Firebase本身提供了一个默认函数,可以在处理程序执行后检查快照是否为空?
self.COLOR_REF.child(id).observe(.childAdded) { (snapshot) in
if snapshot.exists(){
//id exists
let key = snapshot.key
Api.Post.getMyPosts(withId: key, completion: { (post) in
completion(post)
})
}
else{
//id do not exists
}
}
Reupdate - 回答
因为你想检查DB中存在的ID是否可以通过两种方式进行管理
1)当你加载应用程序或任何地方并使用该数组进行检查时,在数组中使所有id号离线 2)当第一个处理程序满足时,需要使用两个处理程序进入第二个
需要代码我将为第二个选项设计
更新答案 -
如何将数据库中关于isDatabaseEmpty的值作为Bool或字符串
进行管理Sp DB就像
----Root
---UserID
--isDatabaseEmpty : "True" // if first time user and "False" //if db has values
--Colors
-Value1
-Value2
---UserID
--isDatabaseEmpty : "True" // if first time user and "False" //if db has values
--Colors
-Value1
-Value2
现在检查isDatabaseEmpty如果为False转到第二个处理程序否, 它有帮助吗?
答案 2 :(得分:0)
我能修复的唯一方法就是这样:
#primary-menu {
float: right;
}
#header.full-header #primary-menu > ul {
float: left;
padding-right: 15px;
margin-right: 15px;
border-right: 1px solid #EEE;
}
#primary-menu ul {
list-style: none;
margin: 0;
}
#page-menu nav {
position: relative;
float: right;
}
#page-menu nav ul {
margin-bottom: 0;
height: 44px;
}