私は @protocol 内で Object メソッドを使用していますが、プロトコルはメソッド宣言のみをサポートしています。誰かがそれを同じメソッドのメソッド定義と接続する方法について助けてくれます.(メソッド定義を書く場所)。
2 に答える
プロトコルは、実装のないメソッド宣言の単なるリストです。それらを使用して、可能な (クラス) のセットを特定のプロトコルを実装するクラスに制限することができます。
たとえば、クラスがある場合GasStation
、ステーションで燃料を補給できるオブジェクトのタイプ (クラス) を制限したい場合があります。もちろん、次のように、オブジェクトが class の子孫であることを単純に要求することもできます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
プロトコルを宣言すると、それに準拠するすべてのクラスがそのプロトコルのメソッドを実装できます。プロトコルが宣言されているヘッダーをインポートし、そのクラスのインターフェイスにプロトコルを追加して、.mにメソッドを実装するだけです。このトピックについて読むことは、優れた提案です。