有条件地在Swift中导入基于iOS版本的框架(如Speech)?

时间:2016-07-23 00:24:55

标签: ios swift

有没有办法根据运行时iOS版本在Swift中有条件地导入框架?

特别是,我的应用的部署目标为iOS 8。我想在应用程序中使用新的Apple Speech框架,如果它在运行时可用的话。我知道代码部分的#available(iOS 10, *)指令,以及可用于整个类的@available(iOS 10, *)指令。因此,我可以轻松避免执行任何使用Speech框架的代码。但是在包含使用Speech的类的文件中,我需要" import Speech"声明,这两个指令都不能在那里使用。我发现即使我的整个班级都有@available(iOS 10, *)指令,当我在iOS 9设备上运行我的应用程序时,它会在启动时被杀死

"dyld: Library not loaded: /System/Library/Frameworks/Speech.framework/Speech".

我是否遗漏了某些内容,或者是否只能在部署目标为10的应用中使用Speech框架?

2 个答案:

答案 0 :(得分:5)

您可以使框架可选(来自Ray Wenderlicht的详细信息和图像):

Making a framework optional

这与您对@available的使用相结合,可以防止系统尝试将其加载到不可用的设备上。

答案 1 :(得分:1)

您需要使用

#if canImport(YourFramework)
import YourFramework
#endif
将框架设置为可选后,

而不是现在可用@: