首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数编译器内部的异步调度变得过于激进?

函数编译器内部的异步调度变得过于激进?
EN

Stack Overflow用户
提问于 2020-10-13 00:01:50
回答 1查看 61关注 0票数 0

今天遇到了一个有趣的问题。加载我弹出的窗口控制器,用于一些特定于任务的UI内容。我只是在处理实际的窗口布局动态,并希望抑制将已配置的视图控制器加载到其中一个视图中-只是在load-up函数中拍了一个"return“,认为它会在异步调用加载VC之前退出该函数。

代码语言:javascript
复制
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(可能)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 00:16:37

这是意料之中的。您的函数返回Void,这是一种只有一个值()的类型。DispatchQueue.main.async也会返回空值。通过返回,您将返回DispatchQueue.main.async (也是())的结果。正如马特在评论中建议的那样,在return之后添加一个;

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64321321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档