Objective-C学习笔记-协议

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;
}
posted @ 2018-10-09 00:41  土豆吞噬者  阅读(121)  评论(0编辑  收藏  举报