gpt4 book ai didi

iphone - 协议(protocol)中的协议(protocol)是否可以被视为包含它们采用的协议(protocol)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:43 28 4
gpt4 key购买 nike

我在遵循继承树的几个类中分配协议(protocol)。像这样:

头等舱

@protocol LevelOne
- (void) functionA
@end

@interface BaseClass : NSObject <LevelOne> {
}

二等舱

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

@interface SubClass : BaseClass <LevelTwo> {
}

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

基类

@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 *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?

最佳答案

只需声明您的子类的委托(delegate)属性同时实现一级和二级协议(protocol)(即同时实现 functionA 和 functionB):

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

@property (assign) id<LevelOne,LevelTwo> levelOneAndTwoDelegate;

关于iphone - 协议(protocol)中的协议(protocol)是否可以被视为包含它们采用的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185801/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com