在每个其他文件中导入两个objective-c协议,结束编译器错误

man*_*anu 3 objective-c

有两个协议,每个协议都在自己的文件中:

// PMAService.h
#import <Foundation/Foundation.h>
#import "PMAPost.h"
#import "PMAServiceProcessingDelegate.h"

@protocol PMAService <NSObject>

-(void)setupService;
-(BOOL)processPost:(PMAPost *)post withDelegate:(id<PMAServiceProcessingDelegate>)delegate;

@end

// PMAServiceProcessingDelegate.h
#import <Foundation/Foundation.h>
#import "PMAPost.h"
#import "PMAService.h"

@protocol PMAServiceProcessingDelegate <NSObject>

-(void)successfullyProcessedPost:(PMAPost *)post by:(id<PMAService>)service;
-(void)notProcessedPost:(PMAPost *)post by:(id<PMAService>)service withError:(NSError *)error;

@end
Run Code Online (Sandbox Code Playgroud)

每个协议都需要与方法声明相反.一旦我在每个文件中创建导入,编译器就不能再编译,因为它告诉我它找不到其中一个协议.

PMAService.h(对于#import语句PMAServiceProcessingDelegate.h)的错误消息

  • 找不到'PMAServiceProcessingDelegate.h'文件

错误消息PMAServiceProcessingDelegate.h(每个方法声明一个):

  • 无法找到'PMAService'的声明
  • 无法找到'PMAService'的声明

有什么我错过了吗?不允许导入这样的协议吗?

alb*_*amg 8

您有一个循环依赖项,您可以使用前向声明来解决:

// PMAService.h
#import <Foundation/Foundation.h>
#import "PMAPost.h"

@protocol PMAServiceProcessingDelegate;

@protocol PMAService <NSObject>

-(void)setupService;
-(BOOL)processPost:(PMAPost *)post withDelegate:(id<PMAServiceProcessingDelegate>)delegate;

@end
Run Code Online (Sandbox Code Playgroud)