Objective c 反转目标-C@是否可用?
最近在Objective-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 ... ... }
@可用
可能很方便,但显然相当短视
任何应用程序运行超过两周都需要针对多个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的简单解决方法)。提供一个有说服力的论点,你永远不会知道。。。