【发布时间】:2022-11-08 00:45:41
【问题描述】:
我有一个观点(为了这个例子,比如说NSOutlineView)。我为它分配了一个委托并覆盖了一个方法,例如:
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
let data = ... some async call to fetch data
let view = makeView(withData: data)
return view
}
在从异步源获取数据的情况下,这里使用的最佳模式是什么?
【问题讨论】:
-
您需要将委托方法本身设置为
async,否则您如何在同步方法中进行异步工作? -
此处显示的委托方法的签名由 Apple 在 NSOutlineView 规范中提供。我的理解是我不能只添加
async,Apple 需要这样做。我在这里错过了什么吗? -
如果该方法不在您的控制范围内,那么您确实无法修改其类型签名。正如我之前所说,您不能在具有返回值的同步方法中进行异步调用,该返回值取决于异步方法调用的结果。您需要重新构建代码,以便在调用委托方法时数据已准备好,或者在异步方法返回后修改返回的视图,但仍同步返回视图。
标签: swift async-await delegates viewcontroller