我是iOS的新手,不知道这是否可行。
基本上我有两个班级Parent和Child。
Parent有一个符合ParentProtocol的委托。但是,Child中的委托不仅符合ParentProtocol,还符合另一个ChildProtocol。
那么可以做到以下几点吗?
@interface Parent {
@property (nonatomic, unsafe_unretained) id<ParentProtocol> delegate;
}
@interface Child : Parent {
@property (nonatomic, unsafe_unretained) id<ParentProtocol, ChildProtocol> delegate;
}
答案 0 :(得分:4)
是的,这是有效的代码。这相当于声明方法
- (id<ParentProtocol>)delegate;
- (void)setDelegate:(id<ParentProtocol>)delegate;
Parent
界面中的以及-delegate
界面中相同选择器(-setDelegate
和Child
)的声明方法
- (id<ParentProtocol, ChildProtocol>)delegate;
- (void)setDelegate:(id<ParentProtocol, ChildProtocol>)delegate;
这是允许的(并且不会导致警告),因为id<ParentProtocol>
和id<ParentProtocol, ChildProtocol>
是兼容类型。 (与Child
声明delegate
声明NSArray *
类型为Property type 'NSArray *' is incompatible with type 'id<ParentProtocol>' inherited from 'Parent'
的情况相反。您将收到警告ChildProtocol
。
顺便说一下,值得注意的是,您可以通过编写
来定义ParentProtocol
继承@protocol ParentProtocol <NSObject>
//....
@end
@protocol ChildProtocol <ParentProtocol>
//....
@end
和
Child
反过来允许您在@property (nonatomic, unsafe_unretained) id<ChildProtocol>;
@property (nonatomic, unsafe_unretained) id<ParentProtocol, ChildProtocol>;
而不是
{{1}}