我正在尝试扩展 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 {}
在 Xcode 16 中,我无法再扩展 UIApplication 以符合我的 AppSwitcher 协议而不遇到错误。它在 Xcode 15 中完美运行。
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
}