Я написал макрос в Objective-C для безопасного переноса. Вот как это выглядит так далеко:Objective-C Safe Casting Macro
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
Это работает очень хорошо, но было бы неплохо, если бы был способ сохранить объект в переменной, так что не было дозвонились дважды. Например, используя макрос, как например:
NSString *str = SAFE_CAST([dictinary objectForKey:key], NSString);
результаты в коде аналогично этому, когда макрос расширяется:
NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil);
Я бы предпочел, чтобы он работал больше, как это:
id obj = [dictionary objectForKey:key];
NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil);
Спасибо.
Я не вижу, что точка это. Вы сказали, что хотите использовать его для дезинфекции plists, но, конечно, если вы используете это, вам нужно проверить, нет ли возвращенного объекта? Почему бы просто не проверить, есть ли объект isKindOfClass: expectedClass? – JeremyP