【问题标题】:Calling Swift async function from Objective-C从 Objective-C 调用 Swift 异步函数
【发布时间】:2022-01-02 06:02:30
【问题描述】:

我正在使用新的 Swift 5.5 功能来创建异步函数:

@MainActor
@objc func updateStatus() async {
    /// do async stuff...
}

但是当我尝试从 Objective-C 代码中调用此方法时,它不会显示在自动完成中,并且如果我尝试构建它会给出构建错误:

if (@available(iOS 15.0, *)) {
     CJSubscriptionStatusCheck *backgroundStatusCheck = [[CJSubscriptionStatusCheck alloc] init];
     [backgroundStatusCheck updateStatus]; // No visible @interface for 'CJStatusCheck' declares the selector 'updateStatus'
}

我的其他 swift 代码在 Objective-C 上运行良好,因此设置很好,但我不确定“异步”代码如何(如果有的话)与 Objective-C 一起使用。我的研究找不到这个问题的答案。

谢谢。

【问题讨论】:

  • 根据github.com/apple/swift-evolution/blob/main/proposals/…,Obj-C中的方法应该叫updateStatusCompletionHandler:或类似的东西。
  • 行得通! Xcode 自动完成功能不会在下拉列表中列出它,但它确实有效!如果您将其作为答案提交,我可以将其标记为这样。

标签: swift objective-c swift5.5


【解决方案1】:

根据SE-0297 Concurrency Interoperability with Objective-Casync方法自动添加completionHandler参数。

因此方法名应该类似于 Objective-C 中的updateStatusCompletionHandler:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 2016-09-16
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多