如何处理交叉导入?

dhr*_*hrm 5 cocoa-touch objective-c

我在Xcode中创建了一个新项目作为单视图iOS应用程序.我创建了一个名为WebView的自定义类,扩展了UIWebView.在故事板中,我将一个WebView添加到ViewController,然后在ViewController.h中为WebView创建一个IBOutlet.我没有使用UIWebView类作为IBOutlet,而是使用我的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中进行交叉导入?

Jos*_*sen 10

在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
Run Code Online (Sandbox Code Playgroud)

WebView.m

#import "WebView.h"
#import "ViewController.h" // Gives full access to the ViewController class

@implementation WebView


- (void)doSomething
{
   [viewController doSomethingElse];
}

@end
Run Code Online (Sandbox Code Playgroud)