[英]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.