【问题标题】:How to get a class's property from a string? [duplicate]如何从字符串中获取类的属性? [复制]
【发布时间】:2013-12-12 06:46:17
【问题描述】:

我想从一个字符串中获取一个类的属性。 例如:

    NSString * propertyStr = @"propertyStr";
    if ([class haveProperty:propertyStr]) {
        class.propertyStr = @"avalue";
    }

不知道有没有说清楚。

【问题讨论】:

标签: ios iphone objective-c nsstring


【解决方案1】:

您想检查您的班级是否有名为propertyStr 的属性,您可以这样做:

NSString *propertyStr = @"propertyStr";
if ([class respondsToSelector:NSSelectorFromString(propertyStr)]) {
    class.propertyStr = @"avalue";
}

【讨论】:

  • 刚刚更新if ([class respondsToSelector:NSSelectorFromString(propertyStr)])它是if ([self respondsToSelector:NSSelectorFromString(propertyStr)])
  • 先谢谢了。如何判断属性是NSString还是int?
  • objective-c 运行时是一种检查方式
【解决方案2】:

由于@property 和@syn 自动创建getter 和setter,我们可以使用下面的代码来检查是否有任何类响应特定消息(setter)

NSString *propertyStr = @"propertyStr";
if ([class respondsToSelector:NSSelectorFromString(propertyStr)]) 
{
[class setValue:@"Value" forKey:propertyStr];
}

【讨论】:

  • 先谢谢了。如何判断属性是NSString还是int?
  • 你可以检查使用 if([class.propertyStr isKindOfClass[NSString Class]])// 然后相应地设置值 else 条件...
  • 原语不是 NSObject 的子类,因此isKindOfClass 将不起作用,将是编译器错误。 Check this answer
【解决方案3】:

尝试使用 respondsToSelector

语法

 if ([class respondsToSelector:@selector(property)])
        [[class property] setProperty:@"value"];

示例

if ([UINavigationBar respondsToSelector:@selector(appearance)])
    [[UINavigationBar appearance] setBarStyle:UIBarStyleBlackOpaque];

【讨论】:

  • 他想通过字符串访问,而不是直接从属性。所以你的回答对他没有帮助,但我想知道投票:D
  • @Virussmca:您是否只因为第一个答案或正确答案而放弃投票?
  • @AnoopVaidya:我给出了表明类是否具有属性的示例方式。/
  • @AnandVyas:但你的示例方法不是他要的答案。
  • @AnoopVaidya:我只是帮他检查它是否有财产。
【解决方案4】:

你可以试试这个..

NSString *selName = @"yourPropertyName";
SEL selector = NSSelectorFromString(selName);

if ([className respondsToSelector:selector])
    className.selName = /* your action*/;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2019-09-04
    • 2016-05-20
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2014-07-11
    相关资源
    最近更新 更多