【发布时间】:2018-03-05 10:28:27
【问题描述】:
我只想在当前设备的 iOS 版本低于特定版本时运行一段代码,如指定的 here。苹果给出的代码示例如下:
if (@available(iOS 10.0, *)) {
// iOS 10.0 and above
} else {
// below 10.0
}
但是,在某些情况下,仅当当前 iOS 版本低于特定版本时才希望运行代码。我假设以下代码可以工作:
if (!@available(iOS 10.0, *)) {
// below 10.0
}
但是这似乎不起作用,我从 Xcode 收到以下警告:
@available does not guard availability here; use if (@available) instead
Here 是添加了我看到的诊断的 LLVM 提交。
该问题有两种可能的后备方案:
- 使用
if-else变体而不向if块添加任何代码(不是很优雅)。 - 继续使用旧方法,例如
-[NSProcessInfo isOperatingSystemAtLeastVersion:]。
还有其他我想念的使用 @available 的方法吗?
【问题讨论】:
-
我已阅读 LLVM 文章,它指出您不能在 if 中将
@available与任何其他条件或指令一起使用。所以基本上我能想到的唯一方法是拥有一个空的if正文,但在else块内执行操作。这对我来说似乎是唯一可能的方法。 -
"但是这似乎不起作用,我从 Xcode 收到以下警告:" 仅仅因为有警告并不意味着它不起作用。警告说它不保护可用性,但您只是将它用作版本检查,而不是保护可用性。
标签: ios objective-c ios11 xcode9 availability