如何将派生类方法委托给协议方法?

问题描述:

我对Objective C非常陌生。请原谅我,如果你发现我的问题很幼稚。我试图在网上搜索,但由于缺乏良好的上下文,搜索结果似乎不符合我的要求。如何将派生类方法委托给协议方法?

我有一个方法foo在协议P中声明。 interfaceP派生的继承,并提供foo的实现。我有另一个interfaceAnotherDerived从协议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

你能否让你的问题少一点抽象?我认为我和P以及foo很难遵循。你能否做出更具体的解释? – Fogmeister

+0

我很抱歉不适。我正在添加更多细节。 –

+0

致电[超级富]你的AnotherDerived应继承衍生 –

只是因为两个类实现相同的协议,并不意味着这两个类之间有某种关系。 AnotherDerived中的foo方法不知道还有一些其他类Derived也实现foo

你可以明确地在AnotherDerivedfoo分配的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 

但你仍然需要明确调用fooDerived

@interface AnotherDerived: NSObject <P> 
+ (NSString *)foo 
{ 
    return [Derived foo]; 
} 
@end 

最后,你可以让AnotherDerived继承自Derived,正如其他人指出的那样。

+0

构图对我来说效果很好。谢谢! –

如果我理解正确的,你的Derived工具P,和你的AnotherDerived应该调用Derived实施foo?你需要让AnotherDerived继承Derived

@interface AnotherDerived: Derived 
- (NSString *)foo 
{ 
    return [super foo]; 
} 

没有必要让AnotherDerived实施P,因为Derived已经做到这一点。