Swift 3 - @仅适用于ios 9而非ios 10

Kes*_*ava 12 uicollectionview swift swift3

我想看看这是否可能.看起来像设置UICollectionViewFlowLayout的estimatedItemSize在ios 9中工作得不太好.它的工作方式非常好ios 10.所以我正在考虑为ios 9实现sizeForItemAt ..方法.无论如何使用@available?如果有人可以解决问题,将会非常有帮助.

Jan*_*orf 12

我希望在版本较低的iOS 11时执行代码,这是我如何做到的:

if #available(iOS 11, *) {
  // This is probably empty
} else {
  // This code will only be executed if the version is < iOS 11
}
Run Code Online (Sandbox Code Playgroud)

这不是最干净的解决方案,但我找不到更好的方法而且它能够完成它的工作.


use*_*434 6

嗯?按照文档说的做:

@available(iOS, obsoleted: 10.0)
Run Code Online (Sandbox Code Playgroud)

要么

@available(iOS, introduced: 9.0, obsoleted: 10.0)
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了两个选项,在这两种情况下,它也在ios 10中执行.不知道为什么 (4认同)

Par*_*oja 3

let systemVersion = UIDevice.currentDevice().systemVersion
println("iOS\(systemVersion)")

if systemVersion == 9.0 {
  //Do Something
}
Run Code Online (Sandbox Code Playgroud)

您可以像下面这样使用:

@available(iOS 10.0, *)
private func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
    logParklee.verbose("willPresentNotification")
}
Run Code Online (Sandbox Code Playgroud)

或者

if #available(iOS 10, *) {
    // use UIStackView
} else {
    // show sad face emoji
}
Run Code Online (Sandbox Code Playgroud)

或者

guard #available(iOS 9, *) else {
    return
}
Run Code Online (Sandbox Code Playgroud)

或者

@available(iOS 7, *)
func iOS7Work() {
    // do stuff

    if #available(iOS 8, *) {
        iOS8Work()
    }
}

@available(iOS 8, *)
func iOS8Work() {
    // do stuff
    if #available(iOS 9, *) {
        iOS9Work()
    }
}

@available(iOS 9, *)
func iOS9Work() {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 正如我所说,我希望整个方法仅在 iOS 9 上运行,而不是在 iOS10 上运行。您的解决方案正好相反。 (3认同)