我可以找到很多关于使对象支持多种协议的问题,但没有人确认 @property 是否可以。例如,我有一个具有以下属性的类:
@property (strong) id dataSource;
此处传入的对象支持 UITableViewDataSource 协议,因此我可以毫无问题地分配它,在 ARC 中没有警告:
self.tableView.dataSource = self.dataSource;
我还想实现另一个名为 CustomControllerSearchDelegate 的搜索协议。但是,如果我开始随机调用其他方法,ARC 就会开始抱怨。所以我们沿着协议路在我的对象中定义它并让属性支持它。这会导致分配给表数据源的问题。所以对于主要问题,我可以这样做:
@property (strong) id <UITableViewDataSource, CustomControllerSearchDelegate> dataSource;
如果不是,什么是合适的选择?
或者,什么是正确的方法来消除这个编译器警告:
Assigning to 'id<UITableViewDataSource>' from incompatible type
'id<PickerViewControllerDataSource>'
抱歉,如果这解释得不好。:/
- 编辑 -
所以我的协议现在定义为:
@protocol PickerViewControllerDataSource <UITableViewDataSource>
属性定义为:
@property (strong) id <PickerViewControllerDataSource> dataSource;
然而编译器会抛出以下错误:
No known instance method for selector 'objectAtIndexPath:'
- 编辑 -
上面在自定义协议中声明。现在声明如下:
@protocol PickerViewControllerDataSource <UITableViewDataSource>
- (id)objectAtIndexPath:(NSIndexPath *)indexPath;
@optional
- (void)searchDataWithString:(NSString*)string;
- (void)cancelSearch;
@end
谢谢你。