swift - Objective-C 的 "#ifdef __IPHONE_11_0"的 Swift 等价物是什么?

标签 swift xcode macros versioning

我想使用 Xcode 9 将 iOS 11 代码添加到我的项目中,同时保留使用仅支持 iOS 10 的 Xcode 8 编译项目的选项。

在 Objective-C 中,我可以通过使用预处理器指令来检查是否定义了 __IPHONE_11_0 来做到这一点。如果我使用早于 iOS 11 的 Base SDK 进行编译,这将隐藏代码。像这样:

#ifdef __IPHONE_11_0
    if (@available(iOS 11.0, *)) {
        self.navigationController.navigationBar.prefersLargeTitles = YES;
    }
#endif

有没有办法在 Swift 中做到这一点?

if#available(iOS 11.0, *) 不起作用,因为这是运行时检查。

最佳答案

iOS 11 SDK 附带 Swift 3.2(或 Swift 4),因此您可以使用 Swift 版本检查来完成同样的事情:

#if swift(>=3.2)
    if #available(iOS 11.0, *) {
        …
    }
#endif

关于swift - Objective-C 的 "#ifdef __IPHONE_11_0"的 Swift 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424337/

相关文章:

swift - CLLocationManager didUpdateLocations 在后台模式下仅被调用两次

swift - 我如何定义 CollectionType 的扩展,以便它的方法可用于字典?

xcode - AppStore 一直告诉我更新 XCode

ios - 如何使用 swift iOS(不使用 UITextView)进行多行扩展 UTextField 或文本输入

c++ - 尝试使用 Visual Studio 2008 堆调试器调试内存泄漏

macros - 在构建宏中访问 Context.getLocalClass() 的 Class<T>

macros - 为什么这个宏被替换为 20 而不是 10?

ios - UIViewControllerAnimatedTransitioning 无法正常工作

swift - 推送 interfaceController 时获取 WKInterfaceController 引用

ios - 在代码片段中包含重写