我对Objective C很新。如果你觉得我的问题非常幼稚,请原谅。我尝试在网上搜索,但由于缺乏良好的背景,搜索结果似乎不符合我的要求。
我在协议foo
中声明了一个方法P
。 interface
派生继承自P
并提供foo
的实施。我还有另一个interface
AnotherDerived
,它继承自协议P
。我想将AnotherDerived
方法的调用委托给foo
,以便调用Derived方法。
@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
有办法做到这一点吗?
答案 0 :(得分:3)
仅仅因为两个类实现相同的协议,并不意味着这两个类之间存在某种关系。 foo
中的AnotherDerived
方法不知道还有其他类Derived
,它还实现了foo
。
您可以在Derived
&#39; s AnotherDerived
中明确分配foo
的实例并使用它:
@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
但您仍需要从foo
Derived
@interface AnotherDerived: NSObject <P>
+ (NSString *)foo
{
return [Derived foo];
}
@end
最后,您可以让AnotherDerived
继承Derived
,正如其他人所指出的那样。
答案 1 :(得分:1)
如果我理解正确,您的Derived
实施P
,AnotherDerived
应该调用foo
中实施的Derived
?您需要AnotherDerived
继承Derived
:
@interface AnotherDerived: Derived
- (NSString *)foo
{
return [super foo];
}
无需AnotherDerived
实施P
,因为Derived
已经这样做了。