gpt4 book ai didi

Objective-C:循环协议(protocol)要求

转载 作者:行者123 更新时间:2023-12-02 06:41:33 25 4
gpt4 key购买 nike

我有 2 个 View Controller 、一个对象选择器和一个对象编辑器。这两个对象都有自己的协议(protocol),允许演示者接收数据并关闭它们。

编辑器有时需要呈现一个选择器,而选择器有时需要允许编辑对象。

问题在于存在循环协议(protocol)依赖性,并且由于对象必须符合协议(protocol),声明转发不起作用(您仍然会收到编译器警告)。

我不只是声明需要符合它的 ivar,整个选择器/编辑器类都需要符合,因此 header 需要有关协议(protocol)的完整信息。

我收到一个找不到“EditorDelegate”的协议(protocol)定义错误。

这是一个例子:

Picker.h

#import "Editor.h"
@protocol PickerDelegate;
@interface Picker : UIViewController <EditorDelegate> {
id <PickerDelegate> delegate;
}
@protocol PickerDelegate <NSObject>
- (void)picker:(Picker *) wasDismissedWithObject:(id)object;
@end

Editor.h

#import "Picker.h"
@protocol EditorDelegate;
@interface Editor : UIViewController <PickerDelegate> {
id <EditorDelegate> delegate;
}
@protocol EditorDelegate <NSObject>
- (void)editor:(Editor *) dismissedAfterEditingObject:(id)object;
@end

如何克服这个问题?

最佳答案

同文件解决方案:

@protocol classBProtocol;

@protocol classAProtocol <NSObject>
-(void)fooA:(id<classBProtocol>)classB;
@end

#import "classB.h"

@interface classA : NSObject
@property (nonatomic) id<classBProtocol> delegate;
@end

@protocol classAProtocol;

@protocol classBProtocol <NSObject>
-(void)fooB:(id<classAProtocol>)classA;
@end

#import "classA.h"

@interface classB : NSObject
@property (nonatomic) id<classAProtocol> delegate;
@end

这里的技巧是在协议(protocol)声明之后导入 header 。

关于Objective-C:循环协议(protocol)要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065558/

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