如何处理交叉导入?
Posted
技术标签:
【中文标题】如何处理交叉导入?【英文标题】:How to handle cross import? 【发布时间】:2012-02-17 09:04:13 【问题描述】:我在 Xcode 中创建了一个作为单视图 ios 应用程序的新项目。我创建了一个名为 WebView 的自定义类来扩展 UIWebView。在情节提要中,我向 ViewController 添加了一个 WebView,然后在 ViewController.h 中为 WebView 制作了一个 IBOutlet。我没有为 IBOutlet 使用 UIWebView 类,而是使用了我的 cusom WebView 类,并且也在 ViewController.h 中导入了它的头文件。现在我的 ViewController 已连接到 WebView 类的 Web VIew。
接下来,我希望我的 WebView 能够引用 UIViewController。然后我在我的 WebView.h 中导入 ViewController.h,但随后我开始收到一些编译器错误,例如:
未知类型名称'WebView';你的意思是“UIWebView”吗?
我猜问题是,ViewController.h 导入 WebView.h 而 WebView.h 导入 ViewController.h。 Objective-C中不能交叉导入吗?
【问题讨论】:
【参考方案1】:在 WebView.h 和 ViewController.h 中,您应该预先声明所需的类,而不是导入每个文件,然后在 .m(实现)文件中进行实际导入。
WebView.h
@class ViewController; // This pre-declares ViewController, allowing this header to use pointers to ViewController, but not actually use the contents of ViewController
@interface WebView : UIWebView
ViewController* viewController;
@end
WebView.m
#import "WebView.h"
#import "ViewController.h" // Gives full access to the ViewController class
@implementation WebView
- (void)doSomething
[viewController doSomethingElse];
@end
【讨论】:
【参考方案2】:您无需导入标头即可进行简单引用。相反,您可以使用
声明该类@class WebView;
在界面中,这足以让编译器创建一个 Outlet。当您想要访问类的属性或方法时,您只需要完整的标头。
【讨论】:
以上是关于如何处理交叉导入?的主要内容,如果未能解决你的问题,请参考以下文章
嵌套交叉验证:cross_validate 如何处理 GridSearchCV 作为其输入估计器?
树莓派交叉编译(PS交叉编译链下载安装带WiringPi库交叉编译)