无法扩展 UIApplication 以符合 Xcode 16 中的自定义协议

问题描述 投票:0回答:1

我正在尝试扩展 UIApplication 以符合自定义协议 AppSwitcher 来处理 URL 打开。该代码在 Xcode 15 中运行良好,但升级到 Xcode 16 后,它会导致错误。

public protocol AppSwitcher {
    func open(
        _ url: URL,
        options: [UIApplication.OpenExternalURLOptionsKey: Any],
        completionHandler completion: ((Bool) -> Void)?
    )
}

extension UIApplication: AppSwitcher {}

enter image description here

在 Xcode 16 中,我无法再扩展 UIApplication 以符合我的 AppSwitcher 协议而不遇到错误。它在 Xcode 15 中完美运行。

  • 还有其他人在 Xcode 16 中经历过这种情况吗?
  • 这是 Swift 5.9 或 iOS SDK 中的更改吗?
  • 此更改背后的原因是什么,是否有任何解决方法可以达到相同的结果?
ios swift xcode16
1个回答
0
投票

open
方法现在在其完成处理程序上有更多注释 -
@MainActor
@Sendable
。您也应该将它们添加到您的协议方法中。

public protocol AppSwitcher {
    func open(
        _ url: URL,
        options: [UIApplication.OpenExternalURLOptionsKey: Any],
        completionHandler completion: (@MainActor @Sendable (Bool) -> Void)?
    )
}

还可以考虑在您的协议中使用

async
方法的
open
版本。

public protocol AppSwitcher {
    @MainActor
    func open(_ url: URL, options: [UIApplication.OpenExternalURLOptionsKey : Any]) async -> Bool
}
© www.soinside.com 2019 - 2024. All rights reserved.