相关疑难解决方法(0)

Objective-C @available可以保护AND并拥有更多条件

Objective-C 在XCode 9+/LLVM 5+中有一个@available表达式,它允许您将代码块保护到至少某个操作系统版本,这样如果您使用仅在该范围内可用的API,它就不会发出无人看守的可用性警告操作系统版本

问题在于,这种可用性保护是它只有在它是条件的唯一表达时才有效if.如果您在任何其他上下文中使用它,您会收到警告:

@available does not guard availability here; use if (@available) instead
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果您尝试将可用性检查与以下其他条件进行对比,则它不起作用if:

if (@available(iOS 11.0, *) && some_condition) {
  // code to run when on iOS 11+ and some_condition is true
} else {
  // code to run when on older iOS or some_condition is false
}
Run Code Online (Sandbox Code Playgroud)

任何在if块内或在块内使用iOS 11 API的代码some_condition都会产生无人看守的可用性警告,即使可以保证只有在iOS 11+上才能访问这些代码.

我可以把它变成两个嵌套if的,但是else代码必须重复,这很糟糕(特别是如果它有很多代码):

if (@available(iOS 11.0, *)) {
  if (some_condition) {
    // …
Run Code Online (Sandbox Code Playgroud)

objective-c ios availability xcode9

21
推荐指数
3
解决办法
8877
查看次数

标签 统计

availability ×1

ios ×1

objective-c ×1

xcode9 ×1