1.OC中的协议类似于Java中的Interface,一个类也可以实现多个协议,但是Java中可以通过匿名内部类直接“new”一个Interface(例如SetOnClickListener(new XXX),OC中似乎不能这么做
2.可以通过@required和@optional标注哪些方法是必须的,哪些是可选的,可以通过NSObject中的方法respondsToSelector来判断一个对象是否实现了某种方法
3.协议声明(SimpleCallback.h)
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol SimpleCallback<NSObject>
@required
-(void) doProgress:(NSUInteger) value;
@optional
-(void) doDone;
@end
NS_ASSUME_NONNULL_END
4.在某个类中声明遵守该协议(MyCallback.h)
#import <Foundation/Foundation.h>
#import "SimpleCallback.h"
NS_ASSUME_NONNULL_BEGIN
@interface MyCallback : NSObject<SimpleCallback>
@end
NS_ASSUME_NONNULL_END
5.最后实现协议中的方法(MyCallback.m)
#import "MyCallback.h"
@implementation MyCallback
- (void)doProgress:(NSUInteger)value{
NSLog(@"value=%u",value);
}
- (void)doDone{
NSLog(@"done is optional");
}
@end
6.测试代码
#import <Foundation/Foundation.h>
#import "SimpleCallback.h"
#import "MyCallback.h"
void testCallback(id<SimpleCallback> callback){
[callback doProgress:1234];
if ([callback respondsToSelector:@selector(doDone)]){
[callback doDone];
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyCallback *callback=[[MyCallback alloc] init];
testCallback(callback);
}
return 0;
}