协议中的协议可以被视为包含它们采用的协议吗?

时间:2009-07-26 22:56:47

标签: iphone objective-c inheritance delegates protocols

我在继承树之后的几个类中分配协议。像这样:

头等舱

@protocol LevelOne
- (void) functionA
@end

@interface BaseClass : NSObject <LevelOne> {
}

第二课

@protocol LevelTwo <LevelOne>
- (void) functionB
@end

@interface SubClass : BaseClass <LevelTwo> {
}

稍后我将该类指定为其他类的委托属性

基类

@interface AppClass : NSObject {
    @protected
    id<LevelOne> levelOneDelegate;
}

@property (assign) id<LevelOne> levelOneDelegate;

子类

@interface AppClassesFriend : AppClass {
    @protected
    id<LevelTwo> levelTwoDelegate;
}

@property (assign) id<LevelTwo> levelTwoDelegate;

在此旅程结束时,AppClassesFriend上有2个属性。

“levelOneDelegate”在分配了BaseClass对象时可以访问“functionA”。

但是,我发现“levelTwoDelegate”只能访问“functionB”(它被分配了一个SubClass对象)。

为了让AppClassesFriend能够使用这两个函数,似乎我需要分配一个levelOneDelegate和levelTwoDelegate。

有没有办法让“levelTwoDelegate”可以同时访问?因为,这两个函数都可以在“SubClass”上找到。

所以,我希望能够做到的是:

SubClass *s = [SubClass alloc];
AppClassesFriend *a = [AppClassesFriend alloc];
a.levelTwoDelegate = s;

所以在AppClassesFriend(a)中我可以使用:

 [self.levelTwoDelegate functionA];   <---- this is never found
 [self.levelTwoDelegate functionB];

但似乎我必须添加

a.levelOneDelegate = s;

感谢所有人花时间一直读到这一步。总而言之,问题是,如何让“levelTwoDelegate”访问functionA和functionB?

1 个答案:

答案 0 :(得分:2)

简单地声明您的子类的委托属性实现了一级和二级协议(即实现了functionA和functionB):

@interface AppClassesFriend : AppClass {
    @protected
    id<LevelOne,LevelTwo> levelOneAndTwoDelegate;
}

@property (assign) id<LevelOne,LevelTwo> levelOneAndTwoDelegate;
相关问题