如果有人能解释协议继承背后的逻辑,我将不胜感激。例如以下是什么意思(UITableView.h):
@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
以下类实现不起作用。我有一个类View1(继承UIView),带有相关的协议。我有另一个类,View2(其中包含View1)。现在我想继承该协议。任何人都可以指出我正确的方向。
第1课:
@protocol View1Delegate;
@interface View1 : UIView {
id <View1Delegate> delegate;
// . . .
}
@property (nonatomic, assign) id <View1Delegate> delegate; // default nil. weak reference
@end
@protocol View1Delegate <NSObject>
- (void)View1DelegateMethod;
@end
@implementation View1
@synthesize delegate;
// . . .
@end
第2课:
@protocol View2Delegate;
@interface View2 : View1 {
id <View2Delegate> delegate;
// . . .
}
@property (nonatomic, assign) id <View2Delegate> delegate; // default nil. weak reference
@end
@protocol View2Delegate <NSObject>
- (void)View2DelegateMethod;
@end
@implementation View2
@synthesize delegate;
// . . .
@end
答案 0 :(得分:12)
将其视为构图而非继承。
@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
定义了一个协议,其中包括NSObject
协议的所有方法,UIScrollViewDelegate
协议,以及为UITableViewDelegate
协议定义的任何方法。当您子类化并创建新属性时,您将覆盖超类属性的类型。为了使我的工作方式符合您的要求,您应该将View2Delegate
声明为@protocol View2Delegate <NSObject, View1Delegate>
。
答案 1 :(得分:0)
它与Java(interface UITableViewDelegate extends NSObject, UIScrollViewDelegate
),C#(interface UITableViewDelegate : NSObject, UIScrollViewDelegate
)等接口的继承完全相同。