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

Bry*_*n P 1 text objective-c uitextfield uitextview ios

我有一个由对象组成的字典UITextfield,UITextView并且UILabel它们都具有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];
Run Code Online (Sandbox Code Playgroud)

有没有办法缩短它?

Mic*_*lum 5

我相信你正在寻找respondsToSelector:

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

NSString *text = nil;

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

    if (text) {
        [array addObject:text];
    }
}
Run Code Online (Sandbox Code Playgroud)

正如@Hemang所指出的,你可以在respondsToSelector:这里找到更多关于何时使用的信息:何时在objective-c中使用respondsToSelector