在Objective-C中获取对象的属性名称作为字符串

时间:2014-02-05 09:57:14

标签: ios objective-c properties introspection objective-c-runtime

假设您有一个“Foo”类,其属性为“testProperty”。目的是将属性名称(而不是值)作为NSString。这个问题可能与Get property name as a string重复。但这些答案对我没有帮助,因为:

  • 我不需要所有属性。我只需要特别的一个。
  • 对于NSStringFromSelector(@selector(prop)) - 无论如何你必须输入字符串。

假设我有像

这样的功能
- (NSString *)propertyToString:(id)propertyOfObject

在这种情况下,我可以使用,例如,排序

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:[self propertyToString:foo.testProperty] ascending:NO]; 

最后,代码将是干净的。

2 个答案:

答案 0 :(得分:0)

这是不可能的。您想要获取属性名称,但是您需要传递一些内容以区别于其他属性。

答案 1 :(得分:0)

代码未经过测试。 应该是这样的:

#import <objc/runtime.h>

Class cls = [Foo class];
u_int count;
objc_property_t* props = class_copyPropertyList(cls,&count);
for(int i=0;i<count;i++){
    NSString* propname = [NSString stringWithUTF8String:property_getName(props[i])];
    if([propname hasPrefix:@"test"])
        NSLog(@"foo");
}

您搜索的方法是选择道具集的子集。你唯一能做的就是应用某种过滤器 - 可能是上面属性的命名约定 - 将属性集减少到你想要的属性。