Kyl*_*ery 5 properties objective-c
好吧,所以说我在课堂上有一个属性:
@interface MyObject : NSObject {
MyOtherObject *someOtherObject;
}
@property (nonatomic, copy) MyOtherObject *someOtherObject;
@end
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一些东西来将API响应反序列化为正确的对象,而无需明确定义每个api属性映射到的类.那么,有什么办法让我找出一个属性是什么类,即使它是nil什么?我正在寻找的是一些[MyObject classForProperty:@"someOtherObject"]返回Class对象的方法.注意 - 我不是在寻找isKindOfClass:或只是class,因为那些不会对nil值有效.
最糟糕的情况是,我可以手动定义一个属性类列表,但是如果有一些内置方法可以做到这一点真的很好.
好吧,我在遇到这个问题后最终弄清楚了这一点:In Objective-C Define if a Property is an int, float, double, NSString, NSDate, NSNumber, etc
这是代码:
@interface NSObject (Properties)
+ (Class)classForProperty:(NSString *)propertyName;
@end
#import <objc/runtime.h>
@implementation NSObject (Properties)
+ (Class)classForProperty:(NSString *)propertyName {
const char *attributes = property_getAttributes(class_getProperty([self class], [propertyName UTF8String]));
NSString *attributesString = [NSString stringWithUTF8String:attributes];
NSArray *parts = [attributesString componentsSeparatedByString:@","];
NSString *typeString = [[parts objectAtIndex:0] substringFromIndex:1];
if ([typeString hasPrefix:@"@"] && [typeString length] > 1) {
NSString *name = [typeString substringWithRange:NSMakeRange(2, [typeString length]-3)];
Class theClass = NSClassFromString(name);
return theClass;
}
return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)
它似乎对我来说工作得很好,但任何修改都是绝对受欢迎的。
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |