iOS - @available 不保护此处的可用性;使用 if (@available) 代替

Saz*_*han 1 objective-c ios

我正在使用下面的代码但收到警告,

bool versionSupports = (@available(iOS 10, *));
Run Code Online (Sandbox Code Playgroud)

@available 并不保护此处的可用性;使用 if (@available) 代替

有一个解决方案我可以使用

if (@available(iOS 10, *)){
//compile
}else{
//fallback
}
Run Code Online (Sandbox Code Playgroud)

我很好奇,为什么输出可以放置在 if() 条件内,但不能放置在布尔变量中?

rma*_*ddy 5

@available(iOS 10, *)不是一个BOOL表达式。它不会返回代码是否在该版本的 iOS 上运行的指示。

它需要采用以下形式:

if (@available(iOS 10, *)) {
    // Code that requires iOS 10 or later
} else {
    // Code for iOS 9 or earlier
}
Run Code Online (Sandbox Code Playgroud)

如果您想要一个变量来指示当前设备是否运行 iOS 10 或更高版本,那么您可以执行以下操作:

BOOL versionSupports = [UIDevice currentDevice].systemVersion.floatValue >= 10;
Run Code Online (Sandbox Code Playgroud)

您可能还会发现Objective-C @available Guard AND'ed 具有更多条件,根据您的需要有所帮助。