我有一个由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];
有没有办法缩短它?
答案 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