为什么DispatchQueue.main.async在Swift应用程序中不起作用?

时间:2019-10-28 05:44:21

标签: swift xcode asynchronous

我在Swift的异步代码中苦苦挣扎。如果没有互联网连接,我必须禁用2个按钮。我在2个不同的函数中有2个DispatchQueue.main.async调用。其中的一种有效,但另一种则不会禁用该按钮(好事情是您可以单击该按钮而什么也没有发生)。我正在iPhone上测试代码,因为模拟器无法正常运行我使用的SDK。

所有这些功能如下所示(这是最后一个不起作用的功能):

public func disableButton2(_ check: Bool) {
        DispatchQueue.main.async{
            self.button2.isEnabled = check
}

2 个答案:

答案 0 :(得分:0)

我已经用过了,它工作正常

DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) { [weak self] in
  guard let self = self else {
    return
  }

尝试此操作,您将获得结果。

答案 1 :(得分:0)

一种更准确的方法是,为了解释“为什么asyncAfter起作用而不仅仅是异步”,将是DispatchQueue.main.asyncAfter将捕获线程以使UI发生更改。 但是大多数时候可能是因为您正在尝试更新另一个视图中的视图元素,比如说UIViewController中的UICollectionView。为了解决这个问题,您应该在进行此UI更新的方法内部调用async方法