今天遇到了一个有趣的问题。加载我弹出的窗口控制器,用于一些特定于任务的UI内容。我只是在处理实际的窗口布局动态,并希望抑制将已配置的视图控制器加载到其中一个视图中-只是在load-up函数中拍了一个"return“,认为它会在异步调用加载VC之前退出该函数。
func setContainer( container:ListContainer ){
self.container = container
return
DispatchQueue.main.async {
// return
let vs = ListsViewController()
vs.setLists(lists: self.container.itemLists)
vs.view.frame = CGRect(x: 0, y: 0, width: self.listsBox.frame.width, height: self.listsBox.frame.height)
self.listsBox.subviews.removeAll()
self.listsBox.addSubview(vs.view)
}
}有趣的是,有了第一个返回,异步调用中的内容仍然会执行,就像编译器说“该返回不适用于异步调用,因为我已经说过了。”
异步代码块中的返回(目前已被注释掉)确实做了正确的事情,但我觉得奇怪的是,异步代码块仍然会运行,并出现在返回之后。我疯了吗?
macOS Catalina、macOS应用程序、Xcode12.0.1、Swift 5(可能)
发布于 2020-10-13 00:16:37
这是意料之中的。您的函数返回Void,这是一种只有一个值()的类型。DispatchQueue.main.async也会返回空值。通过返回,您将返回DispatchQueue.main.async (也是())的结果。正如马特在评论中建议的那样,在return之后添加一个;。
https://stackoverflow.com/questions/64321321
复制相似问题