swift - 使用 Swift 在 Firebase 中完成异步任务

标签 swift firebase asynchronous firebase-realtime-database

我正在尝试编写一个函数来返回我所有工作人员的数组,但它在从 firebase 检索数据之前返回

这是我的代码:

func getWorkersList() -> ([Worker])
{
    let workersInfoRef = ref.childByAppendingPath("countries/\(userCountry)/cities/\(userCity)/workers/\(workFieldToRecieve)/")

    var workerList = [Worker]()
        workersInfoRef.queryOrderedByChild("name").observeSingleEventOfType(.Value, withBlock: { (snapshot) in

        print(snapshot.childrenCount)
        for rest in snapshot.children.allObjects as! [FDataSnapshot]{

            let workerInfo = Worker(uid: rest.value["uid"] as! String, name: rest.value["name"] as! String, city: rest.value["city"] as! String, profession: rest.value["profession"] as! String, phone: rest.value["phone"] as! String, email: rest.value["email"] as! String, country: rest.value["country"] as! String)
            workerList.append(workerInfo)

        }
        }) { (error) in
            print(error.description)
    }

    print(workerList.count)
    return workerList

}

最佳答案

这没有经过测试...我只是即时编写代码来给你一个大概的想法

向您的函数添加一个完成 block /回调...

func getWorkersList(callback: ((data:[Worker]) ->Void )) {
    let workersInfoRef = ref.childByAppendingPath("countries/\(userCountry)/cities/\(userCity)/workers/\(workFieldToRecieve)/")

    var workerList = [Worker]()
    workersInfoRef.queryOrderedByChild("name")
       .observeSingleEventOfType(.Value, withBlock: { (snapshot) in

        print(snapshot.childrenCount)
        for rest in snapshot.children.allObjects as! [FDataSnapshot]{

            let workerInfo = Worker(uid: rest.value["uid"] as! String, name: rest.value["name"] as! String, city: rest.value["city"] as! String, profession: rest.value["profession"] as! String, phone: rest.value["phone"] as! String, email: rest.value["email"] as! String, country: rest.value["country"] as! String)
            workerList.append(workerInfo)

        }
        print(workerList.count)
        callback(workerList)

   }) { (error) in  print(error.description) }
}

传入完成 block ..

getWorkersList(callback: { (data:[Worker]) -> Void in 
    print(data)
})

关于swift - 使用 Swift 在 Firebase 中完成异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104816/

相关文章:

swift - 核心数据处理集

arrays - 如何从多个 BezierPath 创建多个路径

angular - Ionic4:任务 ':app:processDebugManifest' 执行失败

java - 仅使用从数据库检索的消息填充 viewHolder?

ios - 即使在主线程上调用 cellForRowAtIndexPath : setNeedsDisplay not working for images downloaded in the background,

asp.net - 我应该将工作卸载到 ASP.NET 中的其他线程吗?

swift - 如何在 NSManagedObject Swift 扩展中创建托管对象子类的实例?

ios - 从 url 下载图像并将其存储为文件

firebase - 如何在Firebase中的列表字段中添加值?

c# - 异步异常未被捕获或被吞噬