【问题标题】:implementing protocol methods in objective-c在objective-c中实现协议方法
【发布时间】:2010-10-17 13:50:12
【问题描述】:

如果我有一个协议(比如 UIPickerViewDataSource)并且我实现了它所需的方法,我是否需要在我的类的头文件中声明这些方法?

目前我没有这样做,我收到了不完整实施的警告(尽管一切正常)。如果我确实添加了所需的方法,那么我不会收到这样的警告:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

这是正确的行为吗?是否真的需要在我的类的头文件中添加所需协议方法的声明?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch uikit


    【解决方案1】:

    不,你没有。声明该类实现该协议并实现方法就足够了。不过,出于文档目的,您仍然可以在标题中声明它们。

    【讨论】:

    • +1 如果您在标头中指定实现协议,我不会在此处声明它们 - 与覆盖方法相同。正如 Apple 建议的那样,我确实喜欢在实现文件中使用 pragma 进行分组。
    • 不必在头文件中显式指定协议方法,我可能会补充一点,大多数时候我发现将这些协议方法添加到类头文件不必要地乱扔头文件并分散方法的注意力使课程“独一无二”。
    • 确实如此。这是您的类“导出”哪些方法的开放规范。并且委托方法可能不是您希望其他人/对象直接调用的。
    【解决方案2】:

    正确的方式是声明你的类实现了协议。例如,如果您的类名为LordSandwichViewController,那么您的类接口必须如下所示:

    @interface LordSandwichViewController : UIViewController <UIPickerViewDataSource> {
    {
    }
    

    所以你不用在你的类接口中声明协议方法,只声明协议。

    【讨论】:

    • 确切地说,您使用接口声明的尖括号分隔部分来声明您的类符合列出的协议。实际的协议声明以 @protocol 指令开头。
    【解决方案3】:

    不完整的实现警告告诉您您没有实现所有必需的方法:

    1. 在标题中定义。
    2. 声明您遵守的协议所需的方法。

    查看它所期望的方法,并实施这些方法。

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 2017-03-19
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多