我只想在当前设备的iOS版本低于特定版本时运行一段代码,如指定here。苹果给出的示例代码如下所示:否定Objective-C的@available关键字
if (@available(iOS 10.0, *)) {
// iOS 10.0 and above
} else {
// below 10.0
}
但是,在某些场景下一个要运行的代码只有在当前的iOS版本低于特定版本。我认为下面的代码将工作:
if ([email protected](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文章,它指出你不能在任何其他条件或指令中使用'@ available'。所以基本上我能想到的唯一方法是拥有一个空的'if'主体,但在'else'块内执行操作。这似乎是我唯一可能的方式。 – cramopy
“但是,似乎这不起作用,我从Xcode得到以下警告:”只是因为有警告并不意味着它不起作用。警告称它不能保证可用性,但是您只是将它用作版本检查,而不是保证可用性。 – user102008