首页 > 解决方案 > 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)

标签: swiftfirebasefirebase-realtime-databaseswiftui

解决方案


这正是关于异步行为的。尝试进行以下操作:

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")
        }
}

另请了解更多关于在 Swift 中转义闭包的信息。


推荐阅读