Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
如何使用const CGFloat检查NS\u可用\u IOS_Ios_Objective C - Fatal编程技术网

如何使用const CGFloat检查NS\u可用\u IOS

如何使用const CGFloat检查NS\u可用\u IOS,ios,objective-c,Ios,Objective C,当一个方法只能在某些iOS版本上使用时,我通常使用respondsToSelector:检查它的可用性 使用const CGFloat声明,这是不可能的 我试图使用的特定常量是uifontweeghtblack,其定义如下: UIKIT_EXTERN const CGFloat UIFontWeightBlack NS_AVAILABLE_IOS(8_2); 检查我的代码运行的iOS版本是否支持此常量的最佳方法是什么 另外,如果我想支持使用旧版本的iOS SDK构建框架,那么在编译时检查所用

当一个方法只能在某些iOS版本上使用时,我通常使用
respondsToSelector:
检查它的可用性

使用
const CGFloat
声明,这是不可能的

我试图使用的特定常量是
uifontweeghtblack
,其定义如下:

UIKIT_EXTERN const CGFloat UIFontWeightBlack NS_AVAILABLE_IOS(8_2);
检查我的代码运行的iOS版本是否支持此常量的最佳方法是什么


另外,如果我想支持使用旧版本的iOS SDK构建框架,那么在编译时检查所用SDK是否提供此符号的最佳方法是什么

我现在会和你一起检查

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_2
有没有一种方法可以直接检查符号,而不必依赖/明确指定iOS SDK版本?

本节将介绍这一点

通过将外部(外部)常量或通知名称的地址(而不是符号的裸名称)显式比较为NULL或nil,检查其可用性

所以你的代码应该是:

if (&UIFontWeightBlack != NULL) {
    // It is safe to use the constant
}

要回答问题的第二部分,请将编译时检查更改为以下内容:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80200 // 80200 is the value of __IPHONE_8_2
我们希望回过头来使用宏的值,而不是宏本身,因为旧版本的iOS SDK中没有定义宏

正如您在评论中提到的,本节将介绍这一点:

下面的代码摘录演示了这一点。请注意 数值
1050
而不是
\if
comparison子句:如果代码加载到旧系统上,则 不包括符号定义,比较仍然有效


我的问题的第二部分在本节中介绍。谢谢你的链接!哎呀。我甚至没注意到你的问题有两个部分。我刚刚回答了上半场的问题。哇。。。我们中最好的人完全忽视了无忧这一点