主线程继续运行而没有后台线程

时间:2019-02-28 11:16:48

标签: swift multithreading firebase firebase-realtime-database

我正在尝试编写一个函数来从Firebase中获取数据并更新全局变量(分支),我知道后台线程对此负责,因此即使后台线程尚未完成,主线程也可以继续,但我不想要那样。如何强制主线程等待全局变量更新?

以下是函数:

func getID(email: String){
    databaseRef = Database.database().reference()
    databaseRef.root.child("Branches").observe(.value, with: { (snapshot) in
        if ((snapshot.children.allObjects as? [DataSnapshot]) != nil) {
            let child = snapshot.value as! [String: [String : String]]
            for (key, data) in child{
                for (k, d) in data{
                    if k == "Email" && d == email {
                        self.branch = key
                    }
                }
            }
        }
    })
}

1 个答案:

答案 0 :(得分:0)

我假设我们正在谈论iOS,因此: 对所谓的“用户体验”而言,无响应是最糟糕的事情-等待某些网络资源绝对是不可预测的。如果您阻塞主线程的时间过长(例如:30秒),iOS操作系统将终止您的应用程序。在此之前,用户通常会退出您的应用,并且再也不会启动它,而是将其从设备中删除。

我建议改用进度指示器和提示消息,并在应用程序等待数据时将所有用户控件调暗(禁用等)。甚至有一个取消按钮。