Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 协议中的方法定义_Objective C_Ios - Fatal编程技术网

Objective c 协议中的方法定义

Objective c 协议中的方法定义,objective-c,ios,Objective C,Ios,我在@protocol中使用了一个对象方法,但是protocol只支持方法声明,有人能帮我把它和同一个方法的方法定义联系起来吗(方法定义在哪里写)。一旦声明了协议,任何符合它的类都可以实现该协议中的方法。只需导入声明协议的头文件,将协议添加到该类的接口中,并在中实现方法。m阅读本主题是一个很好的建议,顺便说一句,协议只是一个没有任何实现的方法声明列表。它们可用于将一组可能的(类)限制为那些实现特定协议的类 例如,如果您有一个GasStation类,您可能希望限制可以在加油站加油的对象的类型(类)

我在@protocol中使用了一个对象方法,但是protocol只支持方法声明,有人能帮我把它和同一个方法的方法定义联系起来吗(方法定义在哪里写)。

一旦声明了协议,任何符合它的类都可以实现该协议中的方法。只需导入声明协议的头文件,将协议添加到该类的接口中,并在中实现方法。m阅读本主题是一个很好的建议,顺便说一句,协议只是一个没有任何实现的方法声明列表。它们可用于将一组可能的(类)限制为那些实现特定协议的类

例如,如果您有一个
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
@接口气体站:NSObject
-(无效)加油:(NSObject*)东西;
@结束

Vehicle
当然会有一个方法
addFuel:
,因此可以
JerryCan
实现自己的独立版本,即使它不是
Vehicle

我想你在这里混淆了一些事情。您的意思是将方法实现放在何处?您可能需要通读以了解协议的使用方式
@协议
声明上方。