从未知类(id)对象获取文本的较短方式

时间:2014-06-09 07:14:11

标签: ios objective-c text uitextfield uitextview

我有一个由UITextfieldUITextViewUILabel组成的对象字典,它们都具有text属性。现在我需要在不使用丑陋方法的情况下实现这一点,这也是我现在的代码:

NSString *text = @"";

if ( [obj isKindOfClass:[UITextView class]] ) {
    text = [(UITextView *)obj text];
}
else if ( [obj isKindOfClass:[UITextField class]] ) {
    text = [(UITextField *)obj text];
}
else if ( [obj isKindOfClass:[UILabel class]] ) {
    text = [(UILabel *)obj text];
}

[array addObject:text];

有没有办法缩短它?

1 个答案:

答案 0 :(得分:5)

我相信你正在寻找respondsToSelector:

您所要做的就是根据是否有条件地设置变量,您的对象会响应选择器text

NSString *text = nil;

if ([obj respondsToSelector:@selector(text)]) {
    text = [obj text];

    if (text) {
        [array addObject:text];
    }
}

正如@Hemang指出的那样,您可以在此处找到有关何时使用respondsToSelector:的更多信息:when to use respondsToSelector in objective-c