1

我正在尝试在面向 iOS 10.3 的应用中添加自定义意图以支持 Siri 快捷方式。Xcode 自动生成意图类和协议,但所有生成的类和协议都具有以下属性:

@available(iOS 12.0, watchOS 5.0, *)

我知道 #available(...) 但它不用于在编译时包含或排除代码,因此如果我的目标设置为 iOS 12 之前的版本,我不确定如何添加自定义 Intent。

在下面的代码片段中,MyIntentHandling 和 MyIntentResponse 由 Xcode 自动生成。但是,这里没有办法使用#available。

public class MyIntentHandler: NSObject, MyIntentHandling {

    func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) { ... }

    func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) { ... }
}

有没有人有好的解决方案?

4

1 回答 1

-1

不,

#available

用于编译和运行时检查。

Swift 编译器会在编译时检查是否调用了您选择的部署目标不支持的方法,并强制您使用#available条件。因此,从 Xcode 9 开始,支持旧的 iOS 部署目标和使用新功能更加安全。

在运行时,会检查一个#available条件是否与您当前运行的 iOS 版本匹配,并且它将仅执行匹配的代码。

因此,有了额外的意图支持,您就安全了。

于 2018-11-11T14:04:56.503 回答