如何创建协议扩展现有协议和可选的更改?

时间:2015-04-21 18:35:05

标签: ios objective-c iphone

是否可以覆盖现有协议并使其成为可选协议?例如,在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

2 个答案:

答案 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。