我想在我的Swift iOS应用程序中使用NSURLQueryItem.但是,该类仅在iOS 8中可用,但我的应用程序也应该在iOS 7上运行.如何在Swift中检查类是否存在?
在Objective-C中,您可以执行以下操作:
if ([NSURLQueryItem class]) {
// Use NSURLQueryItem class
} else {
// NSURLQueryItem is not available
}
Run Code Online (Sandbox Code Playgroud)
与此问题相关的是:如何检查现有类的方法或属性是否存在?
在https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW4中有一个很好的部分称为支持多个iOS的版本,解释了Objective-C的不同技术.如何将这些转换为Swift?
Sea*_*ean 15
我知道的最简单的方法
if NSClassFromString("NSURLQueryItem") != nil {
println("NSURLQueryItem exists")
}else{
println("NSURLQueryItem does not exists")
}
Run Code Online (Sandbox Code Playgroud)
tou*_*bun 15
Swift 2.0为我们提供了一种简单而自然的方法.它被称为API可用性检查.NSURLQueryItem
因为类仅在iOS8.0之后可用,所以你可以用这种方式在运行时检查它.
if #available(iOS 8.0, *) {
// NSURLQueryItem is available
} else {
// Fallback on earlier versions
}
Run Code Online (Sandbox Code Playgroud)
ban*_*isa 11
试试这个:
if objc_getClass("NSURLQueryItem") != nil {
// iOS 8
} else {
// iOS 7
}
Run Code Online (Sandbox Code Playgroud)
我也是这样做的:
if let theClass: AnyClass = NSClassFromString("NSURLQueryItem") {
// iOS 8
} else {
// iOS 7
}
Run Code Online (Sandbox Code Playgroud)
或者,您也可以检查系统版本,但这不是iOS开发的最佳实践 - 实际上您应该检查功能是否存在.但是我已经将它用于一些iOS 7黑客......实用主义超过了纯度.
switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) {
case .OrderedSame, .OrderedDescending:
iOS7 = false
case .OrderedAscending:
iOS7 = true
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6936 次 |
最近记录: |