【发布时间】:2020-09-10 02:46:50
【问题描述】:
我将数据存储在 Firebase 中,并且我找到了一种方法来创建仅包含键的数组。第一个打印语句正确打印出数组。但是,在数据库引用之外,变量 listOfBannedNames 似乎没有保存数组。该数组打印为 [] ,其中没有任何键。我想将数组存储在变量 listOfBannedNames 中以备后用。
let username = username
let formattedUsername = formatUsername(username: username)
var listOfBannedNames = [String]()
ref.observeSingleEvent(of: .value, with: {
snapshot in
var bannedNamesList = [String]()
for bannedNames in snapshot.children {
bannedNamesList.append((bannedNames as AnyObject).key)
}
listOfBannedNames = bannedNamesList
print(listOfBannedNames)
})
print(listOfBannedNames)
【问题讨论】:
-
上下文不清楚,但它与异步行为有关。第二次打印在
observeSingleEvent调用后立即调用,但不是在它完成后调用(因为此函数立即退出并且请求在后台工作)。当然,您必须将listOfBannedNames设为所有者的财产。 -
@Eduard 给出了一个很好的答案。但是,更大的问题是由您的评论引发的检查用户输入的名称是否在禁止名称列表中 - 如果您想检查用户输入的名称是否在该列表中,那么为什么不直接查询 Firebase 的名称,而不是加载整个列表并在代码中处理它?
-
你能指导我到哪里可以找到这样做的吗?
-
当然。我担心的是,随着禁止名称列表的增长,例如可能是 1000 万个,加载所有要处理的名称会产生很大的开销。询问 Firebase 是否匹配要简单得多。该过程称为查询(或过滤器),并在入门指南Working With lists 的Filtering Data 部分中介绍。回复 cmets 时,在名称前加上 at 符号,例如 @Jay。然后我会收到您的回复通知。
标签: swift firebase firebase-realtime-database swiftui