【问题标题】:Swift 2 API Availability Check for storyboardSwift 2 API 可用性检查故事板
【发布时间】:2015-11-09 07:38:34
【问题描述】:

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

我为 iOS 9 创建了一个新的故事板,它使用了 iOS 9 的功能,如 UIStackView。根据设备操作系统版本实例化适当的故事板文件。

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 "UIStackView before iOS 9.0" 上遇到编译错误

我正在使用 Xcode 7 beta 5。

如何在使用 Swift 2 #availability check 的 iOS 8 支持项目上使用 iOS 9 相关功能

【问题讨论】:

  • 也许对你有帮助:forums.developer.apple.com/thread/6773
  • @Bannings,开发者论坛评论建议将部署目标更改为 iOS 9。但我希望我的应用程序应该支持 iOS 8,仅适用于 iOS 9,我想添加新功能。因为 swift 提供语言级别的支持 #available 来验证功能的可用性。我应该能够添加正确的验证。
  • 无论您是否使用#available,该错误都来自情节提要。
  • 是的。但我正在根据 iOS 版本(使用#available 检查)实例化正确的故事板对象。看起来,我应该只在代码中而不是在故事板中使用新功能。

标签: swift swift2 ios9


【解决方案1】:

我在 Apple Cocoa 开发人员电子邮件列表中收到了 Quincey Morris 的答复。

默认情况下 Build for 在 File Inspector 中为 storyboard 文件设置为“deployment Target”,即 iOS 8,因此编译器会抛出错误。

如果我在使用 iOS 9 功能的情节提要上将“构建”设置更改为 iOS 9。没有错误,应用程序可在 iOS 8 和 iOS 9 中运行。

【讨论】:

    【解决方案2】:

    您不能在 StoryBoard 中使用此类 #availability 功能。如果你想用UIStackView 支持iOS 8,你应该从代码中构造UIStackView,或者使用第三方的兼容库。喜欢OAStackViewTZStackView

    【讨论】:

    • 我们可以在针对 iOS 9 设备的故事板中使用 iOS 9 功能。请看我的回答。正如你所建议的,如果我想在 iOS 8 中实现 StackView,那么我可以使用你提到的开源。
    【解决方案3】:

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

    然后在代码中,无论您为该故事板创建初始视图控制器的任何位置:

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

    错误应该消失。显然,它需要管理更多代码,但您获得了本机 UIStack,并且当您放弃 iOS8 支持时,您仍然拥有功能齐全的 ios9 故事板

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2016-04-18
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多