我有2个班级:
@protocol MainProtocol
-(void) method1;
@end
@interface ClassA : NSObject
@property id <MainProtocol> delegate;
@end
和
@protocol SubProtocol <MainProtocol>
-(void) method2
@end
@interface ClassB : ClassA
@end
@implementation ClassB
-(void) foo {
[self.delegate method1]; // works fine
[self.delegate method2]; // error
}
@end
我不确定为何我无法使用method2
致电self.delegate
。是因为在父类中声明了delegate
吗?如果是,请如何在delegate
中对ClassB
进行本地化?
答案 0 :(得分:1)
在-[ClassB foo]
内,self.delegate
被声明为类型id<MainProtocol>
- 也就是说,它符合MainProtocol,但不一定符合SubProtocol。因此,ClassB实例不确定delegate
是否响应-method2
。如果您要将delegate
发送给它,可以在ClassB中将id<SubProtocol>
重新声明为-method2
类型的对象。