检查 ObjC 属性 在运行时是否可为空
Checking whether an ObjC property is nullable at runtime
我试图在运行时弄清楚 class 的 属性 是否可以为 null。例如:
@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
在这种情况下应该 return 一个 NSSet
和 @"error"
.
property_getAttributes
函数可以提供一些属性的信息(更多信息here)。不幸的是,它没有提供有关 属性 是否声明为可空的信息。
我想避免为每个 class 实现 nullableProperties
,我需要知道其可空属性。
每个 Objective-C 指针或对象 属性 在运行时技术上都可以为空。可空性说明符只是编译器提示,不会影响实际生成的二进制文件由编译器和链接器生成的格式,其中包含表示程序逻辑的机器指令以及其他信息和元数据]。因此,无法在运行时检测哪些属性可以为空,哪些不能。
我试图在运行时弄清楚 class 的 属性 是否可以为 null。例如:
@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
在这种情况下应该 return 一个 NSSet
和 @"error"
.
property_getAttributes
函数可以提供一些属性的信息(更多信息here)。不幸的是,它没有提供有关 属性 是否声明为可空的信息。
我想避免为每个 class 实现 nullableProperties
,我需要知道其可空属性。
每个 Objective-C 指针或对象 属性 在运行时技术上都可以为空。可空性说明符只是编译器提示,不会影响实际生成的二进制文件由编译器和链接器生成的格式,其中包含表示程序逻辑的机器指令以及其他信息和元数据]。因此,无法在运行时检测哪些属性可以为空,哪些不能。