我有一个名为NumberPickerView的UIView子类。我正在为它编写委托方法。编译器不允许我将NumberPickerView的实例作为该方法中的参数传递。我错过了什么?
@protocol NumberPickerViewDelegate
-(void) numberPickerDidChangeSelection:(NumberPickerView *)numberPickerView;
//error: expected a type
@end
@interface NumberPickerView : UIView <UIScrollViewDelegate> {
id <NumberPickerViewDelegate> delegate;
}
答案 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;
}