如何在 Swift 中选择性地导入框架?



我有一个需要由iOS和tvOS使用的共享框架,但我想有选择地导入一个仅适用于iOS的框架(CoreTelephony)。swift 语法说你可以在前面加上一个属性,但这不起作用:

@available(iOS 10.0, *) import CoreTelephony

这根本不支持吗?我是否需要子类来导入 iOS 特定的框架?

对于 Swift <= 4.0,您可以使用os()配置测试函数:

#if os(iOS)
import CoreTelephony
#endif

您还必须包装使用CoreTelephony的代码。

所有可用的os()测试是:macOSiOSwatchOStvOSLinuxWindowsFreeBSD

对于 Swift>= 4.1,您还可以使用canImport()

#if canImport(CoreTelephony)
import CoreTelephony
#endif

[A] 框架的构建设置IPHONEOS_DEPLOYMENT_TARGET为 iOS 14

示例:(参考: https://stackoverflow.com/a/38538861/9801139)

->目标构建阶段

-> 将二进制文件与库链接

-> 将 [A] 框架状态设为可选

在您的目标中

#if canImport(CoreTelephony)
import CoreTelephony
#endif

最新更新