我已经创建了一个基于页面的应用程序。
@class DataViewController 在 ModelController.h 中意味着什么?为什么 ModelController.m 中的#import "DataViewController.h"不够用?
#import <UIKit/UIKit.h>
@class DataViewController;
@interface ModelController : NSObject <UIPageViewControllerDataSource>
- (DataViewController *)viewControllerAtIndex:(NSUInteger)index storyboard:(UIStoryboard *)storyboard;
- (NSUInteger)indexOfViewController:(DataViewController *)viewController;
@end
@class DataViewController;
是为了
-(DataViewController *)viewControllerAtIndex:(NSUInteger)index
storyboard:(UIStoryboard *)storyboard;
@class
是一个前向声明,它告诉编译器对这个旨在返回 DataViewController
对象的方法声明有点宽容,并将处理推迟到实现部分。
您最终将在 ModelController.m
中需要 #import "DataViewController.h"
。
好吧...您可以放置 #import "DataViewController.h"
但是...如果 DataViewController.h
本身有一个 #import "ModelController. h"
语句,然后编译器将进入循环导入循环。
至于:
Why #import "DataViewController.h"
in ModelController.m
is not enough ?
- 您在
ModelController.h
中公开声明方法 -viewControllerAtIndex:storyboard:
。
- 这告诉导入
ModelController
的类它提供了这样一个方法。
- 此方法返回一个
DataViewController
对象并且由于存在 DataViewController.h
导入 ModelController.h
的可能性
- 你需要
@class DataViewController;
在 ModelController.h
- 由于
@class
只是一个前向声明,您需要在ModelController.m
中#import "DataViewController.h"
如果...该方法仅在 ModelController
类中使用,则您无需在 .h
中声明该方法,从而不再需要 @class DataViewController;
语句。
此外,我喜欢 @class vs. #import 上的这个通用 答案