oc65--协议应用1,接口.做数据类型限定
2024-10-01 04:36:19
// WifeCondition.h #import <Foundation/Foundation.h> @protocol WifeCondition <NSObject>
// 会做饭
- (void)cooking;
// 会洗衣服
- (void)washing;
// 有一份好工作
- (void)job;
@end
// Person.h #import <Foundation/Foundation.h>
#import "Wife.h" @interface Person : NSObject // 媳妇
// 注意: 记住一点, 类型限定是写在数据类型的右边的,协议修饰成员变量
@property (nonatomic, strong) Wife<WifeCondition> *wife; - (void)show; @end
// Person.m #import "Person.h" @implementation Person - (void)show
{
// 注意: 虽然在接受某一个对象的时候, 对这个对象进行了类型限定(限定它必须实现某个协议), 但是并不意味着这个对象就真正的实现了该方法. 所以每次在调用对象的协议方法时应该进行一次验证 if ([self.wife respondsToSelector:@selector(cooking)]) { //验证对象有没有实现这个方法 [self.wife cooking];
} if ([self.wife respondsToSelector:@selector(washing)]) { [self.wife washing];
} if ([self.wife respondsToSelector:@selector(job)]) { [self.wife job];
}
}
@end
// Wife.h #import <Foundation/Foundation.h>
#import "WifeCondition.h" @interface Wife : NSObject <WifeCondition> //协议就是写了接口的声明 @end
// Wife.m #import "Wife.h" @implementation Wife
// 会做饭
- (void)cooking
{
NSLog(@"%s", __func__);
}
// 会洗衣服
- (void)washing
{
NSLog(@"%s", __func__);
}
// 有一份好工作
- (void)job
{
NSLog(@"%s", __func__);
}
@end
//
// main.m
// 协议的应用场景1-类型限定 #import <Foundation/Foundation.h>
#import "Person.h"
#import "Wife.h"
#import "WifeCondition.h" //导入.h文件,就是导包。 int main(int argc, const char * argv[]) { Person *p = [Person new];
// 1.协议的第一个应用场景, 可以将协议写在数据类型的右边, 明确的标注如果想给该变量赋值, 那么该对象必须遵守某个协议
// Wife<WifeCondition> *w = [Wife new]; Wife *w = [Wife new];
p.wife = w; [p show]; return ;
}
最新文章
- js取当前周几
- Android内存泄漏分享
- MongoDB基础入门002--基本操作,增删改查
- Cannot instantiate the type AppiumDriver
- 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
- CentOS 7 修改时区(转)
- HDU 4614-Vases and Flowers(线段树区间更新)
- Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错GConf error
- SpringMVC强大的数据绑定
- android学习6——canvas的save,restore作用
- KeepAlived+Nginx实现高可用负载
- JS中的运算符 以及变量和输入输出
- struct stat结构体简介
- wss 协议传送过来的数据是经过 gzip 压缩过的,如何使用 qt 解压该数据呢?
- THUWC2019滚粗记
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
- websocket 与 tornado 的结合
- vue 后退不刷新页面
- ARM 中必须明白的几个概念
- Cocos Studio is EOL&#39;d