//  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 ;
}

oc65--协议应用1,接口.做数据类型限定的更多相关文章

  1. Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

    38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 ...

  2. SSD的传输总线、传输协议、传输接口

    前言:关于SSD,有众多总线类型.协议类型.接口类型,每个接口还包括不同型号,在这里花点时间全部整理一下,整理日期2017-08-08. 1.传输总线 总线就像一条公路,公路上的车好比总线上的电信号: ...

  3. Asp.Net WebAPI配置接口返回数据类型为Json格式

    Asp.Net WebAPI配置接口返回数据类型为Json格式   一.默认情况下WebApi 对于没有指定请求数据类型类型的请求,返回数据类型为Xml格式 例如:从浏览器直接输入地址,或者默认的XM ...

  4. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  5. 基于http协议的api接口对于客户端的身份认证方式以及安全措施

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...

  6. Jmeter_针对响应信息不明确的接口做关联

    下午写一个新功能的接口脚本,遇到几个技术问题,现在将解决方案写出来 1:做接口关联的时候,发现接口响应没有可以利用的信息.如下图只返回了一个成功的标识,这样的接口如何与之关联? 通过抓包观察后续的修改 ...

  7. (转)基于http协议的api接口对于客户端的身份认证方式以及安全措施

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的 jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在 ...

  8. 【JMeter】【性能测试】响应信息不明确的接口做关联

    1:做接口关联的时候,发现接口响应没有可以利用的信息.如下图只返回了一个成功的标识,这样的接口如何与之关联? 通过抓包观察后续的修改功能,发现需要传入一个id和一个title.但是前面的接口没有返回, ...

  9. Objective-C 中的协议(@protocol)和接口(@interface)的区别

    Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...

随机推荐

  1. Python--10、进程知识补充

    守护进程 基于进程启动的子进程,会和主进程一起结束.主进程结束的依据是程序的代码执行完毕. #创建守护进程p=Process(task) p.daemon = True p.start() 子进程需要 ...

  2. 巧用Eclipse Java编辑器调试

    在使用Eclipse开发Java Web应用时,使用的编辑器不但能够为开发者提供代码编写.辅助提示和实时编译等常用功能,而且还能够对Java源代码进行快捷修改.重构和语法纠错等高级操作.通过Eclip ...

  3. Win32最简单的程序

    #include<tchar.h> #include<stdio.h> #include<windows.h> LRESULT CALLBACK WinSunPro ...

  4. Ajax——异步基础知识(二)

    XML数据格式 首行必须是版本号和格式等信息 <?xml version="1.0" encoding="utf-8" ?> 最外层需要一个根节点进 ...

  5. Qt 窗体间传值(代码备份)

    刚开始看的时候看的云里雾里的,现在稍微明白一点了.现在假设有一个form,一个MainWindow,如图所示: 实现点击PushButton,将文本框中的内容传输到MainWindow中,显示为Lab ...

  6. CORNERSTONE在线敏捷开发工具这么强大,除了推荐,我别无选择

    刚接到一个新项目,完全找不到思路, 怎么办? 任务分工不明,成员相互推诿, 怎么办? 编制的工作计划,老挨产品经理批, 怎么办? 时间短,任务紧,进度与时间两难控制, 怎么办? ...... 别着急, ...

  7. ES6 作用域的问题

  8. C++关键字:重学记录

    const_cast dynamic_cast explicit

  9. 48.cartinality的基本用法

    主要知识点 cartinality的用法     es去重用的是cartinality metric算法,对每个bucket中的指定的field进行去重,然后获取去重后的count,类似于count( ...

  10. copy contents of file with variable number in Matlab

    input : transient.case output: transient_1.case, transient_2.case, transient_3.case ... ************ ...