1>协议的定义
@protocol 协议名称 <NSObject>
//方法的声明列表
@end
2>如何遵守协议
1>类遵守协议
@interfacce 类名:父类<协议名称1,协议名称2.....>
@end
2>协议遵守协议
@protocol 协议名称<其他协议名称1,其他协议名称2>
@end
3>协议中声明的关键字
1>@required(默认)
要求必须实现,如果没有实现,就会发出警告
2>@optional
不要求必须实现,怎么样都不会有警告
4>定义一个变量名称的时候,限制这个变量保存的对象遵守某个协议
类名<协议名称>*变量名
NSObject<MyDelegate> *objc
id<协议名称>变量名
id<MyDelegate> objc
5>简单应用
要求:
一个人需要一个app,这个app必须有学习、买东西、分享等功能
处理思路:
1、需要创建一个人和APP
2、需要创建一个Protocol来描述这些功能
3、人拥有的APP要实现这些功能
4、APP需要遵循这个Protocol且实现它
//>>>声明一个协议 DoSomethingProtocol.h文件
#import<Foundation/Foundation.h>
@protocol DoSomethingProtocol <NSObject>
- (void)buySomething;
- (void)studyEnglish;
- (void)shareInfo;
@end
//APP.h文件
#import<Foundation/Foundation.h>
#import"DoSomethingProtocol.h"
@interface APP : NSObject<DoSomethingProtocol>
@end
//APP.m文件
#import"APP.h"
@implementation APP
- (void)buySomething {
NSLog(@"%s",__func__);
}
- (void)shareInfo {
NSLog(@"%s",__func__);
}
- (void)studyEnglish {
NSLog(@"%s",__func__);
}
@end
//Person.h文件
#import<Foundation/Foundation.h>
#import "DoSomethingProtocol.h"
@interface Person : NSObject
// 拥有一个代理属性
// id代表代理的类名随便
// 但必须遵守TicketDelegate协议
@property(nonatomic,strong) id <DoSomethingProtocol> delegate;
@end
//Person.m文件
Person *p = [[Person alloc]init];
p.delegate = self;
//判断app是否有实现协议内容
if([p.delegate respondsToSelector:@selector(buySomething)]){
[p.app buySomething];
}
if([p.delegate respondsToSelector:@selector(studyEnglish)]) {
[p.app studyEnglish];
}
if([p.delegate respondsToSelector:@selector(shareInfo)]) {
[p.app shareInfo];
}
网友评论