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



我对目标C很陌生。如果你觉得我的问题很幼稚,请原谅我。我尝试在网上搜索,但由于缺乏良好的上下文,搜索结果似乎不符合我的要求。

我有一个foo协议P中声明的方法。interface派生自P的继承并提供foo的实现。我还有另一个继承自协议PinterfaceAnotherDerived。我想将调用从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

您可以在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

但是您仍然需要从Derived显式调用foo

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

最后,你可以AnotherDerived其他人指出的那样从Derived继承。

如果我理解正确,您的Derived实现了P,而您的AnotherDerived应该调用fooDerived中实现?您需要从Derived进行AnotherDerived继承:

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

无需AnotherDerived实现P,因为Derived已经这样做了。

最新更新