gpt4 book ai didi

ios - 保持 NSUserActivity 向后兼容 Xcode 9

转载 作者:搜寻专家 更新时间:2023-11-01 06:58:14 25 4
gpt4 key购买 nike

使用 Xcode 10(测试版 6)我可以毫无问题地编写和运行以下代码:

import Intents

func test() {

let activity = NSUserActivity(activityType: "com.activtiy.type")

activity.title = "Hello World"
activity.isEligibleForSearch = true
activity.isEligibleForHandoff = false

if #available(iOS 12.0, *) {
activity.isEligibleForPrediction = true
activity.suggestedInvocationPhrase = "Say something"
}

print(activity)
}

从 iOS 12 开始,添加了 .isEligibleForPredictions.suggestedInvocationPhrase 属性,因此 Xcode 10 可以使用 if#available 保持代码本身向后兼容 有条件的。

但是,我想确保此代码向后兼容早期版本的 Xcode。在 Xcode 9 中运行时,出现以下错误:

if #available(iOS 12.0, *) {
// ERROR: Value of type 'NSUserActivity' has no member 'isEligibleForPrediction'
activity.isEligibleForPrediction = true

// ERROR: Value of type 'NSUserActivity' has no member 'suggestedInvocationPhrase'
activity.suggestedInvocationPhrase = "Say something"
}

这似乎是因为 #available 宏实际上是在运行时解析的,因此包含的所有代码仍然需要成功编译。

在为 iOS 11 或使用 Xcode 9 构建时,有没有办法告诉编译器忽略这两行代码?

最佳答案

Xcode 10 使用 Swift 4.2 而 Xcode 9 使用 Swift 4.1。所以你可以在编译时使用这些知识:

func test() {
let activity = NSUserActivity(activityType: "com.activtiy.type")

activity.title = "Hello World"
activity.isEligibleForSearch = true
activity.isEligibleForHandoff = false

#if swift(>=4.2) // compile-time check
if #available(iOS 12.0, *) { // run-time check
activity.isEligibleForPrediction = true
activity.suggestedInvocationPhrase = "Say something"
predictionApiAvailable = true
}
#endif

print(activity)
}

(此答案假设您在 Xcode 10 上使用 Swift 4.2。)

关于ios - 保持 NSUserActivity 向后兼容 Xcode 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com