取消#可用语句
如果只想在运行iOS8
以前的操作系统的设备上执行代码块。 我做不到:
if #available(iOS 8.0, *) == false { doFoo() }
我现在使用的解决scheme是:
if #available(iOS 8.0, *) { } else { doFoo() }
,但感觉笨重。 有没有另外一种方法来#available
使用swift2来否定#available
语句?
我为这个使用了一个guard
:
guard #available(iOS 8.0, *) else { // Code for earlier OS }
当然,由于要求guard
退出这个范围,所以有一点尴尬的可能性。 但是,通过将整个事物置于自己的function或方法中,这很容易避开:
func makeABox() { let boxSize = .large self.fixupOnPreOS8() self.drawBox(sized: boxSize) } func fixupOnPreOS8() { guard #available(iOS 8, *) else { // Fix up return } }
当你放弃对早期系统的支持时,这真的很容易删除。
看来这是最好的解决scheme,在Swift2之前,你必须使用其他方法,比如使用个人写的随时可用的类。 但没关系,你可以在viewDidLoad()
设置一个variables,并用它来检测旧设备:
var isNewerThan8: Bool = false func viewDidLoad(){ if #available(iOS 8.0, *) { isNewerThan8 = true } else { isNewerThan8 = false } } func myFunction(){ if isNewerThan8 { //foo }else{ //boo } }
#available
语句周围不可能有逻辑。
事实上,编译器使用这个语句来推断在它所包含的范围内可以调用哪些方法,因此在运行时不会有条件地执行该块。
尽pipe如此,可以使用逗号来组合条件
if #available(iOS 8.0, *), myNumber == 2 { // some code }
- UIButton自动调整button字体大小Swift
- -Answered-在UIControl /旋转视图中获取UIButton的点击事件
- 我如何获得资产目录组中的所有图像名称?
- 如何通过button显示图像? -迅速
- 如何快速整合PayU Money
- 有没有一种有效的方法可以快速地将浮点数精确到百分之一?
- UITextView专注,但用户触摸UICollectionViewCell。 隐藏键盘并运行didSelectItemAtIndexPath
- Swift和NSUserDefaults – 当用户默认为空时EXC_BAD_INSTRUCTION
- 如何使UIAppearance代理适用于编程创build的意见?