あなたの助けが必要です。Objective-Cの次の問題:
// Robot.h
@protocol RobotProtocol <NSObject>
-(void)doWork;
@end
@interface Robot : NSObject
// Rob1 sublass of class Robot
// rob1.h
@interface Rob1 : Robot <RobotProtocol>
// rob1.m
@implementation
-(void)doWork
{
// print 'robot 1'
}
// Rob2 sublass of class Robot
// rob2.h
@interface Rob2 : Robot <RobotProtocol>
// rob2.m
@implementation
-(void)doWork
{
// print 'robot 2'
}
// Task.h
@interface Task : NSObject
{
Robot *rob;
}
// Task.m
@implementation
- (id)init
{
if ([super init]) {
rob = [[Rob1 alloc] init]; // or Rob2 !!
}
return self;
}
-(void)doSomething
{
[rob doWork]; // how to make sure, that this is implemented, depending on Rob1 or Rob2
}
Robotのサブクラスの1つである可能性があり、メソッドを呼び出すことができる、Robot
およびそのサブクラスをどのように実装する必要がありますか?私の最初のアイデアは抽象クラスとして実装することでしたが、残念ながら、Objective-Cには抽象クラスがありません...Robot *rob
rob1
rob2
...
doWork:(BOOL)val;
Robot
現在、プロトコルを使用していますが、自信がありません。doWorkが実装されているかどうかわからないため、コンパイラは次のように文句を言います。
「ロボット」は「doWork」に応答しない場合があります
アイデアありがとうございます。