Swift 2 API可用性检查故事板

时间:2015-08-16 16:17:52

标签: swift swift2 ios9

我有一个现有的iOS应用程序,它支持iOS 8.我想为iOS 9添加新功能。

我为iOS 9创建了一个新的故事板,它使用了UIStackView等iOS 9功能。基于Device OS版本实例化适当的故事板文件。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let storyboard: UIStoryboard
    if #available(iOS 9, *, *) {
        storyboard = UIStoryboard(name: "Main", bundle: nil)
    } else {
        storyboard = UIStoryboard(name: "MainOld", bundle: nil)
    }
    let mainViewController = storyboard.instantiateInitialViewController()
    window?.rootViewController = mainViewController
    window?.makeKeyAndVisible()
    return true
}

但我在Main.storyboard" iOS 9.0及#34之前的UIStackView上遇到编译错误;

我正在使用Xcode 7 beta 5。

如何使用Swift 2 #availability检查

在iOS 8支持的项目中使用iOS 9相关功能

3 个答案:

答案 0 :(得分:3)

我在Apple Cocoa开发者电子邮件列表中得到了Quincey Morris的回答。

默认  故事板文件的文件检查器中的构建设置是"部署目标",这是iOS 8,因此编译器会抛出错误。

如果我改变" Build for"在使用iOS 9功能的故事板上设置为iOS 9。没有错误,应用程序在iOS 8和iOS 9中运行。

答案 1 :(得分:2)

您无法在StoryBoard中使用此类#availability功能。如果您希望使用UIStackView支持iOS 8,则应从代码构建UIStackView,或使用第三方的兼容库。与OAStackViewTZStackView一样。

答案 2 :(得分:1)

我创建了两个故事板,一个用于iOS 8,另一个用于iOS 9及更高版本。 对于iOS 9故事板,请转到文件检查器并将最小目标设置为iOS 9,将iOS8设置为iOS 8。

Set to iOS9 in storyboard

然后在代码中,无论您为该故事板使用创建初始视图控制器,还是使用:

if #available(iOS 9.0, *) {
    // create view controller from iOS 9 storyboard 
} else { 
    //create view controller from iOS 8 storyboard
}

错误应该发生。显然它需要管理更多的代码,但是你得到了原生的UIStack,当你放弃iOS8支持时,你仍然拥有功能齐全的ios9故事板