如何解决Firebase参考对象不会保存到SwiftUI中的变量
我将数据存储在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)
解决方法
那完全是关于异步行为。尝试进行以下操作:
func makeRequestToFirebase(completion: @escaping ([String]) -> Void) {
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)
completion(listOfBannedNames) // - that will wait until the list of names arrives
})
}
然后使用功能:
makeRequestToFirebase() { names in
print(names)
workWithNames(names)
}
现在您可以根据需要使用它,例如:
func workWithNames(names: [String]) {
for name in names {
if name == "Alexander" {
print("One more Alexander found")
}
}
也请进一步了解escaping closures in Swift。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。