委托方法不能引用自己的类

时间:2014-08-23 13:13:37

标签: ios objective-c

我有一个名为NumberPickerView的UIView子类。我正在为它编写委托方法。编译器不允许我将NumberPickerView的实例作为该方法中的参数传递。我错过了什么?

@protocol NumberPickerViewDelegate

-(void) numberPickerDidChangeSelection:(NumberPickerView *)numberPickerView;
//error: expected a type

@end


@interface NumberPickerView : UIView <UIScrollViewDelegate> {
     id <NumberPickerViewDelegate> delegate;
}

2 个答案:

答案 0 :(得分:3)

实际上它可以。那时编译器并不了解NumberPickerView

@class NumberPickerView;

通过协议声明添加它以让编译器知道该类...它被称为forward declaration

为了更好地理解,请查看:

iPhone+Difference Between writing @classname & #import"classname.h" in Xcode

OR

将协议声明移到类NumberPickerView定义下面,但在这种情况下,您还应该在顶部添加:

@protocol NumberPickerViewDelegate;

不要使用id<NumberPickerViewDelegate>delegate

收到警告

答案 1 :(得分:3)

您可以将参数类型更改为id而不是NumberPickerView *并将任何类对象后跟传递为下面的

@protocol NumberPickerViewDelegate

-(void) numberPickerDidChangeSelection:(id)numberPickerView;

@end


@interface NumberPickerView : UIView <UIScrollViewDelegate> {
     id <NumberPickerViewDelegate> delegate;
}