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

时间:2017-07-17 08:41:21

标签: ios objective-c inheritance

我对Objective C很新。如果你觉得我的问题非常幼稚,请原谅。我尝试在网上搜索,但由于缺乏良好的背景,搜索结果似乎不符合我的要求。

我在协议foo中声明了一个方法Pinterface派生继承自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

有办法做到这一点吗?

2 个答案:

答案 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实施PAnotherDerived应该调用foo中实施的Derived?您需要AnotherDerived继承Derived

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

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