在 Swift 开始耗时任务之前应更改界面

Interface should be changed before time-consuming task starts in Swift

我正在尝试实现 collectionView 单元格的以下行为:通过点击单元格,应该首先更改单元格的外观!之后,应该开始一个耗时的过程:

@objc private func addItemsToBasket(_ button: UIButton) {
         button.setTitleColor(.clear, for: .normal)
         Basket.addItems(keys: planner.currentDayKeys())
}

但不幸的是,只有在耗时的块完成后,单元格才会改变外观。如果我评论“Basket.addItems(keys: planner.currentDayKeys())”,单元格会更改其外观提示。

我已经在 GCD 中尝试了不同的选项,但没有任何帮助。但实际上,如果我不定义队列,代码应该 运行 逐行。对吗?

应该是很常见的情况。 预先感谢您的任何想法。

如评论中所述,您不应在主队列上执行耗时任务。在这种情况下,GCD 肯定会帮助你。你有没有尝试过这样的事情:

@objc private func addItemsToBasket(_ button: UIButton) {
    button.setTitleColor(.clear, for: .normal)
    DispatchQueue.global.async {
        Basket.addItems(keys: self.planner.currentDayKeys())
    }
}

但是您需要确保,如果您在 Basket.addItems 中做了一些 UI 更改,您需要通过将它们包装在 DispatchQueue.main.async 闭包中将它们分派回 main。