调用 UIViewController dismiss 和/或存在于异步上下文中?

Calling UIViewController dismiss and/or present in an async context?

提问人:shim 提问时间:11/3/2022 最后编辑:shim 更新时间:1/12/2023 访问量:524

问:

根据异步调用 Objective-C API 从 Objective-C 导入的满足特定要求的方法被“导入为两个方法”,其中一个方法而不是完成块。async

如果该方法有多个参数,并且最后一个参数的选择器部分是以下参数之一,则 Swift 会将该方法作为异步方法导入 ...

  • completion

present(_:animated:completion:) 的 Objective-C 签名是 presentViewController:animated:completion:UIViewController

因此,基于此,应该有一个异步替代方案,如下所示:present

func present(_ viewControllerToPresent: UIViewController, animated flag: Bool) async

同样,对于其他方法,如.dismiss

但 Xcode 似乎没有任何这些方法的内置异步版本。

我认为这些方法仍然是从 Objective-C 导入的......如果你打开 的定义 ,有一个选项可以打开“原始源代码”,它是 Objective-C。present

我是否误解了“异步调用 Objective-C API”文档?或者 Swift 不使用异步替代方案导入这些方法还有其他原因吗?

swift objective-c uiviewcontroller uikit swift 并发

评论

1赞 dan 11/3/2022
它们在头文件中标记为 ,以显式阻止生成异步版本NS_SWIFT_DISABLE_ASYNC
0赞 shim 11/3/2022
啊,不错的收获。请将其添加为答案,我会接受。

答:

1赞 shim 11/8/2022 #1

它们在头文件中标记为 ,以显式阻止生成异步版本NS_SWIFT_DISABLE_ASYNC

在上面的评论中归功于 Dan

评论

0赞 shim 11/8/2022
@dan如果你添加一个答案,我会删除这个答案