簡體   English   中英

檢查Swift中是否存在類

[英]Check for class existence in Swift

我想在我的Swift iOS應用程序中使用NSURLQueryItem。 但是,該類僅在iOS 8中可用,但我的應用程序也應該在iOS 7上運行。如何在Swift中檢查類是否存在?

在Objective-C中,您可以執行以下操作:

if ([NSURLQueryItem class]) {
    // Use NSURLQueryItem class
} else {
    // NSURLQueryItem is not available
}

與此問題相關的是:如何檢查現有類的方法或屬性是否存在?

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW4中有一個很好的部分稱為支持多個iOS的版本 ,解釋了Objective-C的不同技術。 如何將這些轉換為Swift?

Swift 2.0為我們提供了一種簡單而自然的方法。它被稱為API可用性檢查。 NSURLQueryItem類僅在iOS8.0之后可用,所以你可以用這種方式在運行時檢查它。

    if #available(iOS 8.0, *) {
        // NSURLQueryItem is available

    } else {
        // Fallback on earlier versions
    }

我知道的最簡單的方法

if NSClassFromString("NSURLQueryItem") != nil {
    println("NSURLQueryItem exists")
}else{
    println("NSURLQueryItem does not exists")
}

嘗試這個:

if objc_getClass("NSURLQueryItem") != nil {
   // iOS 8 
} else {
   // iOS 7
}

我也是這樣做的:

if let theClass: AnyClass = NSClassFromString("NSURLQueryItem") {
    // iOS 8
} else {
    // iOS 7
}

或者,您也可以檢查系統版本,但這不是iOS開發的最佳實踐 - 實際上您應該檢查功能是否存在。 但是我已經將它用於一些iOS 7黑客......實用主義超過了純度。

    switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) {
    case .OrderedSame, .OrderedDescending:
        iOS7 = false
    case .OrderedAscending:
        iOS7 = true
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM