我在继承树之后的几个类中分配协议。像这样:
头等舱
@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?
答案 0 :(得分:2)
简单地声明您的子类的委托属性实现了一级和二级协议(即实现了functionA和functionB):
@interface AppClassesFriend : AppClass {
@protected
id<LevelOne,LevelTwo> levelOneAndTwoDelegate;
}
@property (assign) id<LevelOne,LevelTwo> levelOneAndTwoDelegate;