Проверить, является ли свойство язык допускает значения null во время выполнения
Я пытаюсь выяснить во время выполнения, является ли свойство класса nullable. Например:
@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
функция может предоставить информацию о некоторых атрибутах (подробнее здесь ). К сожалению, он не предоставляет информацию о том, объявляется ли свойство недействительным.
Я хотел бы избежать реализации nullableProperties
для каждого класса, для которого мне нужно знать свойства nullable.
1 ответ:
Каждый указатель Objective-C или свойство объекта технически могут быть обнулены во время выполнения. Спецификаторы nullability-это просто подсказки компилятора, которые не влияют на фактический встроенный двоичный файл [edit: под которым я подразумеваю, поскольку это очевидно неясно, 1 и 0, которые записываются на диск либо в Mach-O, либо в каком-либо другом сопоставимом двоичном формате компилятором и компоновщиком и которые содержат машинные инструкции, представляющие логику программы наряду с другой информацией и метаданными]. Следовательно, нет способа определить во время выполнения, какие свойства могут быть обнулены, а какие нет.