有没有办法做这样的事情(下面不起作用):
@protocol ElementPicker <UIViewController>
- (id)initWithFile:(NSFileWrapper *)file andInfo:(NSString *)info;
@property (nonatomic, weak) NSObject<ElementPickerDelegate> *delegate;
@end
因此,实现"ElementPicker"的对象必须继承自UIViewController
?
No.协议只能扩展其他协议。您可以做的最接近的事情是将变量、属性或参数定义为也遵守ElementPicker
协议的UIViewController
。像这样:
- (void)someMethod:(UIViewController<ElementPicker> *)controller {
}
旁注 - 通常将委托定义为id
,而不是NSObject
。如:
@property (nonatomic, weak) id<ElementPickerDelegate> delegate;
我不认为协议可以要求它是UIViewController
,但是您可以通过设置要求委托是UIViewController
来轻松实现这一点:
@property (nonatomic, weak) UIViewController<ElementPickerDelegate> *delegate;