Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 反转目标-C@是否可用?_Objective C_Xcode_Macos_Cocoa - Fatal编程技术网

Objective c 反转目标-C@是否可用?

Objective c 反转目标-C@是否可用?,objective-c,xcode,macos,cocoa,Objective C,Xcode,Macos,Cocoa,最近在Objective-C中添加的@可用可能很方便,但显然相当短视 任何应用程序运行超过两周都需要针对多个macOS版本 不幸的是,唯一可用的明确针对较旧的操作系统版本的@构造(从Xcode到12个版本,包括12个版本)就是这个麻烦 if (@available(macOS 11.0, *)) { // all hunky-dory: no-op } else { // legacy work arounds ... ... }

最近在Objective-C中添加的
@可用
可能很方便,但显然相当短视

任何应用程序运行超过两周都需要针对多个macOS版本

不幸的是,唯一可用的明确针对较旧的操作系统版本的
@构造(从Xcode到12个版本,包括12个版本)就是这个麻烦

  if (@available(macOS 11.0, *))
  {
     // all hunky-dory: no-op
  }
  else
  {
     // legacy work arounds
     ...
     ...
  }
仅使用带有否定的else分支会发出可怕的@available不保护此处的可用性编译器警告。

有没有办法简化这段可怕的代码并删除伪no op分支?

您可以使用预处理器,定义一个宏:

#define ifNotAvailable(A, B) if (@available(A, B)) {} else
然后将代码编写为:

ifNotAvailable(macOS 11.0, *)
{
   // legacy work arounds
   ...
   ...
}

这是否不那么“可怕”取决于旁观者,YMMV

当然,任意语言扩展和变通方法总是可以使用预处理器构建的——但我一直在寻找一个普遍可用的内置解决方案……不清楚“普遍可用”是什么意思。如果希望宏在Xcode项目中的任何地方都“自动”可用,可以将其放置在单独的
.h
中,并设置生成设置前缀头以引用此文件–使用项目相对路径。(此构建设置转换为一个
-include
编译器选项,因此如果使用makefiles或命令行,您可以执行类似的操作。)我们鼓励您也前往并建议Apple向Objective-C和Swift添加否定(后者没有宏,因此缺少Objective-C的简单解决方法)。提供一个有说服力的论点,你永远不会知道。。。