Swift 架构设计中避免在后台线程上调用UI API的正确方法是什么?

Swift 架构设计中避免在后台线程上调用UI API的正确方法是什么?,swift,macos,Swift,Macos,在MacOS应用程序中,我有一个由另一个模块调用的回调函数,该模块是一个网络模块,它从Internet获得一些响应以触发回调: func callbackHandler() { someViewController.updateSomeView() } 在此回调处理程序中,调用视图控制器来更新某些视图,并在视图控制器内重新加载表的数据: func updateSomeView() { someTable.reloadData() } 但是,通过这样做,我将得到如下错误: Ma

在MacOS应用程序中,我有一个由另一个模块调用的回调函数,该模块是一个网络模块,它从Internet获得一些响应以触发回调:

func callbackHandler() {
    someViewController.updateSomeView()
}
在此回调处理程序中,调用视图控制器来更新某些视图,并在视图控制器内重新加载表的数据:

func updateSomeView() {
    someTable.reloadData()
}
但是,通过这样做,我将得到如下错误:

Main Thread Checker: UI API called on a background thread: ...
因此,我必须在调用者中添加DispatchQueue.main.async:

func callbackHandler() {
    DispatchQueue.main.async() {
        someViewController.updateSomeView()
    }
}
或被叫人:

func updateSomeView() {
    DispatchQueue.main.async() {
        someTable.reloadData()
    }
}
任何一种方法都能解决问题。但我认为,调用方或被调用方知道调用的UI API将通过添加DispatchQueue.main.async作为修复程序在后台线程上调用,这是非常奇怪的


如何在设计架构方面以适当的方式实现它?

您所做的以及API都是完全合理的。异步回调到达后台线程(特别是与网络相关的线程)是很正常的,被调用方必须跳出到主线程才能接触用户界面。别担心,要快乐