你的问题是循环依赖。前向声明也无济于事,因为您只会让编译器警告您它看不到协议的定义。有两种选择:
选项 1
将协议拆分成各自的头文件:
ClassA.h:
#import <Foundation/Foundation.h>
#import "ClassBProtocol.h"
@interface ClassA : NSObject <ClassBProtocol>
@end
ClassB.h:
#import <Foundation/Foundation.h>
#import "ClassAProtocol.h"
@interface ClassB : NSObject <ClassAProtocol>
@end
ClassAProtocol.h:
#import <Foundation/Foundation.h>
@protocol ClassAProtocol <NSObject>
...
@end
ClassBProtocol.h:
#import <Foundation/Foundation.h>
@protocol ClassBProtocol <NSObject>
...
@end
选项 2
如果您不关心在外部声明您实现了协议,那么您可以使用类延续类别:
ClassA.h:
#import <Foundation/Foundation.h>
@interface ClassA : NSObject
@end
ClassA.m:
#import "ClassA.h"
#import "ClassB.h"
@implementation ClassA () <ClassBProtocol>
@end
@implementation ClassA
@end
ClassB.h:
#import <Foundation/Foundation.h>
@interface ClassB : NSObject
@end
ClassB.m:
#import "ClassB.h"
#import "ClassA.h"
@implementation ClassB () <ClassAProtocol>
@end
@implementation ClassB
@end