我在我正在使用的某些代码区域中看到了这一点。
searchBar.delegate = (id<UISearchBarDelegate>)self;
我的问题是......
为什么不通过在类的接口中添加UISearchBar
来使当前类成为<UISearchBarDelegate>
的委托?
上述代码是否比将该类作为委托更好?
这两种方式对我有用,但我想了解为什么我可能想要使用另一种方式。
答案 0 :(得分:6)
演员方法可以被视为作弊。如果委托类不想公开声明协议一致性(但为什么它被公开设置为委托),则会使用它。或者,如果委托类没有实现所有必需的方法,那么声明协议一致性将导致警告。
通常,更好的方法是声明协议一致性(公开(.h)或私有(.m))。
答案 1 :(得分:1)
如果您没有使用.h中的UISearchBarDelegate
@interface ScaryBugData < UISearchBarDelegate>
@property (strong) UISearchBar * searchBar;
@end
然后在您的.m文件中,您必须执行以下操作以使警告静音
searchBar.delegate = (id<UISearchBarDelegate>)self;