我在@protocol中使用了一个Object方法,但是协议只支持方法声明,有人可以帮我解决如何将它与同一方法的方法定义联系起来。(在哪里编写方法定义)。
答案 0 :(得分:1)
协议只是一个没有任何实现的方法声明列表。它们可用于将一组可能的(类)限制为实现某个协议的那些(类)。
例如,如果您有一个GasStation
类,您可能希望限制可以在工作站加油的对象的类型(类)。当然,您可以简单地要求对象成为类Vehicle
的后代,如下所示:
@interface GasStation : NSObject
- (void)refuel:(Vehicle *)vehicle;
@end
@implementation GasStation
- (void)refuel:(Vehicle *)vehicle {
[vehicle addFuel:100];
}
@end
但是这不允许例如填充罐子。但是,允许传递任何类型的对象也是一个坏主意,因为如果您传递Cat
的实例,在尝试向其发送addFuel:
消息时肯定会收到错误。
因此,您可以定义可加注类必须实现的协议:
@protocol RefuelableThing
@required
- (void)addFuel:(float)fuel;
@end
现在您可以使用该协议来限制可以加油的对象类型:
@interface GasStation : NSObject
- (void)refuel:(NSObject<RefuelableThing> *)thing;
@end
Vehicle
当然会有方法addFuel:
,因此JerryCan
可以实现自己的单独版本,即使它不是Vehicle
。< / p>
答案 1 :(得分:0)
一旦声明了协议,任何符合它的类都可以实现该协议中的方法。只需导入声明协议的头,将协议添加到该类的接口,并在.m中实现该方法,阅读该主题是一个很好的建议,顺便说一下