gpt4 book ai didi

Objective-C#导入循环

转载 作者:太空狗 更新时间:2023-10-30 03:21:32 26 4
gpt4 key购买 nike

我有以下代码:

#import <Foundation/Foundation.h>
#import "ServerRequest.h" // works even though this line is included
#import "ServerResponseRecord.h"

@protocol ServerRequestDelegate<NSObject>

-(void)request:(id)request gotResponseRecord:(ServerResponseRecord*)response;
-(void)request:(id)request gotError:(NSError*)error;

@end

它编译并运行良好。但是,如果我将方法声明替换为:

-(void)request:(ServerRequest*)request gotResponseRecord:(ServerResponseRecord*)response;
-(void)request:(ServerRequest*)request gotError:(NSError*)error;

我收到意外的语法错误“error: expected ')' before 'ServerRequest'”。我认为这可能是个问题的唯一原因是 ServerRequestDelegate.h 和 ServerRequest.h #import 彼此。但是,我不明白为什么代码与带有 (id) 请求的 #import 行一起工作。我也不明白为什么它是语法错误。

有人可以提供一个很好的解释吗?

最佳答案

您已经暗示了解释:#import 循环。

我要做的第一件事是删除 #include 并在 @protocol 定义上方添加以下行:

@class ServerRequest;

这是一个前向类声明,可以帮助打破导入循环。查看this SO question更多细节。苹果在this guide中也有简要说明.

基本上,#import'ing 一个文件会导致编译器将该文件的整个文本放入有问题的文件中,尽管 #import 更“聪明”比 #include,这并不意味着您可以避免导入错误。 @class 声明是一种在不导入 header 的情况下告诉编译器类存在的方法。当你只需要知道类名而不关心它提供的方法时使用它是合适的。通常,您想在 .h 文件中使用 @class 并在 .m 文件中使用 #import,您实际上在其中与类进行交互。

关于Objective-C#导入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223914/

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