我试图在运行时弄清楚类的属性是否可以为空。例如:
@interface A : NSObject
+ (NSSet<NSString *> *)nullableProperties;
@property (readonly, nonatomic) NSString *description;
@property (readonly, nonatomic, nullable) NSError *error;
@end
@implementation A
+ (NSSet<NSString *> *)nullableProperties {
// Code that identifies nullable properties.
}
@end
在这种情况下, nullableProperties
应该返回NSSet
@"error"
。
property_getAttributes
函数可以提供一些属性的信息(更多信息here)。不幸的是,它没有提供有关该属性是否被声明为可空的信息。
我想避免为每个需要知道可空属性的类实现nullableProperties
。
答案 0 :(得分:5)
每个Objective-C指针或对象属性在运行时在技术上都可以为空。可空性说明符只是简单的编译器提示,不会影响实际构建的二进制文件[编辑:我的意思是,因为这显然不清楚,在Mach-O或其他一些文件中写入磁盘的1和0编译器和链接器的可比二进制格式,包含表示程序逻辑以及其他信息和元数据的机器指令。因此,没有办法在运行时检测哪些属性可以为空,哪些属性不可用。