我对目标C很陌生。如果你觉得我的问题很幼稚,请原谅我。我尝试在网上搜索,但由于缺乏良好的上下文,搜索结果似乎不符合我的要求。
我有一个foo
协议P
中声明的方法。interface
派生自P
的继承并提供foo
的实现。我还有另一个继承自协议P
interface
AnotherDerived
。我想将调用从AnotherDerived
方法委托给foo
,以便调用派生方法。
@protocol P <NSObject>
@required
- (NSString *)foo;
@end
@interface Derived: NSObject <P>
- (NSString *)foo
{
return _foo;
}
@end
@interface AnotherDerived: NSObject <P>
- (NSString *)foo
{
return [super foo]; <----------------- I need something like this. It should call method of Derived
}
@end
有没有办法做到这一点?
仅仅因为两个类实现相同的协议,并不意味着这两个类之间存在某种关系。AnotherDerived
中的foo
方法不知道还有其他类Derived
也实现了foo
。
您可以在AnotherDerived
的foo
中显式分配Derived
的实例并使用它:
@interface AnotherDerived: NSObject <P>
- (NSString *)foo
{
Derived *d = [Derived new];
return [d foo];
}
@end
或者,您可以将foo
声明为类方法:
@protocol P <NSObject>
@required
+ (NSString *)foo;
@end
@interface Derived: NSObject <P>
+ (NSString *)foo
{
return _foo;
}
@end
但是您仍然需要从Derived
显式调用foo
@interface AnotherDerived: NSObject <P>
+ (NSString *)foo
{
return [Derived foo];
}
@end
最后,你可以AnotherDerived
其他人指出的那样从Derived
继承。
如果我理解正确,您的Derived
实现了P
,而您的AnotherDerived
应该调用foo
在Derived
中实现?您需要从Derived
进行AnotherDerived
继承:
@interface AnotherDerived: Derived
- (NSString *)foo
{
return [super foo];
}
无需AnotherDerived
实现P
,因为Derived
已经这样做了。