扩展 属性 如果不可用
Extended property if not available
随着 Swift 2,Apple 引入了 API 可用性检查,它允许只在指定版本或更高版本上执行某些代码,如下所示:
if #available(iOS 9, *) {
// use UIStackView
} else {
// use fallback
}
例如,iOS 9.0 引入了 localizedUppercaseString
属性:
/// An uppercase version of the string that is produced using the current
/// locale.
public var localizedUppercaseString: String { get }
我想要的是创建此 属性 的精确副本,该副本仅适用于低于 9.0 的版本,因此我无需在需要使用此(或任何其他)property/method.
我能得到的最好结果如下:
extension String {
@available(iOS 8.0, *)
var localizedUppercaseString: String {
return uppercaseStringWithLocale(NSLocale.currentLocale())
}
}
有了这个,我可以调用localizedUppercaseString
,不管iOS版本是8.0还是9.0。问题是当使用 iOS 9.0.
执行时,此扩展会覆盖 "original" 属性
extension String {
var myLocalizedUppercaseString: String {
if #available(iOS 9, *) {
return localizedUppercaseString
} else {
return uppercaseStringWithLocale(NSLocale.currentLocale())
}
}
}
现在你只需要使用 myLocalizedUppercaseString
属性.
随着 Swift 2,Apple 引入了 API 可用性检查,它允许只在指定版本或更高版本上执行某些代码,如下所示:
if #available(iOS 9, *) {
// use UIStackView
} else {
// use fallback
}
例如,iOS 9.0 引入了 localizedUppercaseString
属性:
/// An uppercase version of the string that is produced using the current
/// locale.
public var localizedUppercaseString: String { get }
我想要的是创建此 属性 的精确副本,该副本仅适用于低于 9.0 的版本,因此我无需在需要使用此(或任何其他)property/method.
我能得到的最好结果如下:
extension String {
@available(iOS 8.0, *)
var localizedUppercaseString: String {
return uppercaseStringWithLocale(NSLocale.currentLocale())
}
}
有了这个,我可以调用localizedUppercaseString
,不管iOS版本是8.0还是9.0。问题是当使用 iOS 9.0.
extension String {
var myLocalizedUppercaseString: String {
if #available(iOS 9, *) {
return localizedUppercaseString
} else {
return uppercaseStringWithLocale(NSLocale.currentLocale())
}
}
}
现在你只需要使用 myLocalizedUppercaseString
属性.