是否可以覆盖现有协议并使其成为可选协议?例如,在CUSTOMTableViewDataSource中,如果编译器未实现- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
,则编译器不应生成警告。
@protocol CUSTOMTableViewDataSource <UITableViewDataSource>
@optional
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
@end
答案 0 :(得分:2)
您可以声明采用UITableViewDataSource协议的CUSTOMTableViewDataSource协议,但是根据定义,这意味着如果一个类采用CUSTOMTableViewDataSource协议,它也采用UITableViewDataSource协议 - 因此编译器将如果未实现UITableViewDataSource所需的方法,仍然会发出警告。
答案 1 :(得分:1)
恐怕编译器会在这里产生警告。协议具有@required和@optional方法,这些方法在创建时声明。在您的情况下,如果您打开UITableView.h文件,您可以清楚地看到两种方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
被声明为@required方法&amp; UITableView.h的内容被锁定,因此您无法修改它。所以在你的情况下,谈论这两种方法的答案是否定的。另一方面,如果我正在定义协议,我可以根据需要选择声明方法@required和@optional。