有没有办法只允许UIViewControllers遵守协议?

Luk*_*uke 0 objective-c uiviewcontroller ios objective-c-protocol

有没有办法做这样的事情(下面不起作用):

@protocol ElementPicker <UIViewController>

- (id)initWithFile:(NSFileWrapper *)file andInfo:(NSString *)info;

@property (nonatomic, weak) NSObject<ElementPickerDelegate> *delegate;
@end
Run Code Online (Sandbox Code Playgroud)

那么实现"ElementPicker"的对象必须继承UIViewController

rma*_*ddy 6

不可以.协议只能扩展其他协议.您可以做的最接近的是将变量,属性或参数定义为UIViewController也遵循ElementPicker协议的变量,属性或参数.像这样的东西:

- (void)someMethod:(UIViewController<ElementPicker> *)controller {
}
Run Code Online (Sandbox Code Playgroud)

旁注 - 通常将委托定义为id,而不是NSObject.如:

@property (nonatomic, weak) id<ElementPickerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

  • 通过确保您的委托协议扩展了`NSObject`协议来解决这个问题:`@protocol ElementPickerDelegate <NSObject>`.请注意,有一个`NSObject`类和一个`NSObject`协议. (2认同)