在@interface中声明类实例

时间:2015-06-17 10:21:46

标签: ios objective-c

我想创建类型为ViewController的变量,该变量在.h文件的开头

导入

KTOneFingerRotationGestureRecognizer.h

#import <UIKit/UIKit.h>
@class ViewController.h;


@interface KTOneFingerRotationGestureRecognizer : UIGestureRecognizer
{
    ViewController* mainViewController; // error: Unknown type name `ViewController`; did you mean `UIViewController`?
}

@property (nonatomic, assign) CGFloat rotation;

@property (nonatomic, strong) ViewController* mainViewController; // error: Unknown type name `ViewController`; did you mean `UIViewController`?

@end

我需要将这些变量放在头文件中,因为它们必须是可访问的,并且可以从类外部分配。

由于

编辑:

感谢回复。根据lostInTransit的建议,由于从ViewController导入KTOneFingerRotationGestureRecognizerKTOneFignerRotationGestureRecognizer导致ViewController,导致错误发生。根据建议,我将#import "ViewController.h"更改为@class ViewController;,删除了错误,但现在我的代码无法使用。

访问ViewController的目的是我想从ViewController检索KTOneFingerRotationGestureRecognizer对象的位置,但@class声明不允许我访问此对象变量。我将演示。

ViewController.h

#import <UIKit/UIKit.h>

#import "KTOneFingerRotationGestureRecognizer.h"

@interface ViewController : UIViewController
{
    UIView* pitchCircleView;
}

@property (nonatomic, strong) UIView* pitchCircleView;

@end

我试图通过以下方式检索它:

KTOneFingerRotationGestureRecognizer.m

float f = mainViewController.pitchCircleView.frame.origin.x;

但它给了我错误:Property pitchCircleView cannot be found in forward class object ViewController

2 个答案:

答案 0 :(得分:4)

尝试使用@class代替#import。然后在实现中导入。你可能会看到这个因为循环包含(即你的ViewController类导入KTOneFingerRotationGestureRecognizer) - 在我们看到一些代码之前无法确定。

答案 1 :(得分:1)

你有循环依赖关系,你可以避免在头文件中使用@class和在实现文件中使用#import,但从根本上说你有设计缺陷。

大概你的KTOneFingerRotationGestureRecognizer想要告诉ViewController发生了什么事情,所以你应该设计和使用一个协议,它可以通过委托模式传达这些信息。

ViewController类可以符合该协议,并将自身设置为手势识别器的委托。

这意味着手势识别器可以由符合协议的任何视图控制器使用,而不仅仅是ViewController,这可以促进代码的重复使用。

这通常用Cocoa类完成。