如何使用const CGFloat检查NS\u可用\u IOS
当一个方法只能在某些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构建框架,那么在编译时检查所用
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子句:如果代码加载到旧系统上,则
不包括符号定义,比较仍然有效
我的问题的第二部分在本节中介绍。谢谢你的链接!哎呀。我甚至没注意到你的问题有两个部分。我刚刚回答了上半场的问题。哇。。。我们中最好的人完全忽视了无忧这一点