ios - 否定#available语句

标签 ios swift

我只想在运行低于 iOS8 操作系统的设备上执行代码块。我做不到:

if #available(iOS 8.0, *) == false {
    doFoo() 
}

我目前使用的解决方案是:

if #available(iOS 8.0, *) { } else { 
    doFoo() 
}

,但感觉笨拙。有没有另一种方法可以用 Swift 优雅地否定 #available 语句?

最佳答案

我为此使用了一个守卫:

guard #available(iOS 8.0, *) else {
    // Code for earlier OS
}

当然,由于 guard 需要退出作用域,因此可能会有轻微的尴尬。但这很容易通过将整个事情放入它自己的函数或方法中来回避:

func makeABox()
{
    let boxSize = .large

    self.fixupOnPreOS8()

    self.drawBox(sized: boxSize)
}

func fixupOnPreOS8()
{
    guard #available(iOS 8, *) else {
        // Fix up
        return
    }
}

当您放弃对早期系统的支持时,删除它真的很容易。

关于ios - 否定#available语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633799/

相关文章:

ios - NSMutableString 上的 KVO 不工作

ios - 当用户终止应用程序时重新连接蓝牙设备

python - kivy-ios 部署到 iOS 时导入 ssl 错误

ios - 如果在初始化期间发布通知,则未收到通知?

ios - 为 UIWebView 中的 contenteditable div 禁用自动大写

ios - 仅在顶部带有圆角的 UITextField

ios - 在父 UIViewController 中收到多个 NSNotifications

ios - 未从 UITableViewCell 调用委托(delegate)方法

ios - 使用 retryWhen 根据 http 错误代码更新 token

swift - 向上滚动时,UITableview 的部分标题未固定在顶部 - Swift