什么是Swift相当于Objective-C的"#ifdef __IPHONE_11_0"?

Mat*_*uch 19 versioning macros xcode swift

我想使用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
Run Code Online (Sandbox Code Playgroud)

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

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

Lil*_*ard 18

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

#if swift(>=3.2)
    if #available(iOS 11.0, *) {
        …
    }
#endif
Run Code Online (Sandbox Code Playgroud)


pes*_*sch 5

这是Apple建议的解决方案:

if #available(iOS 11.0, *) {
    // iOS 11 specific stuff here
} else {
    // non iOS 11 stuff here
}
Run Code Online (Sandbox Code Playgroud)

请参考此资源(有关更多详细信息,请观看标记6:50的视频)

  • 这是用于方法内部的。我认为op正在尝试找出仅适用于iOS 11或更高版本的方法该怎么做。 (3认同)