第07天OC语言(03):协议应用场景1-类型限定

  • 不要等到明天,明天太遥远,今天就行动。

#####须读:看完该文章你能做什么?

给某个类的对象让它遵循协议

#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

什么是协议


#####一、本章笔记

/*
 
 1.协议的第一个场景, 可以将协议 写在数据类型的右边.明确的标注 如果想给该变量赋值,那么该对象 必须遵守某个协议
 2.让一个对象遵守某个协议
    @property (nonatomic,strong) Wife<WifeCondition> *wife;
 3.虽然在接收某一个对象的时候,对这个对象进行类型限定(限定它必须实现某个协议),但是并不意味着这个对象 就真正的实现了该方法,所以每次在调用对象的协议方法时应该进行一次验证
    使用 respondsToSelector 进行一个方法的判断

 */

#####二、code ######main.m

#pragma mark 03-协议应用场景1-类型限定

#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#import "Wife.h"
#import "WifeCondition.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
    Person *p = [[Person alloc]init];
//    Wife<WifeCondition> *w = [[Wife alloc]init];
    Wife *w = [Wife new];
        
    p.wife = w;
    [p show];
    
    return 0;
}

######Person

>>>.h
#import <Foundation/Foundation.h>
#import "Wife.h"
@interface Person : NSObject

// 注意 : 记住一点,类型限定 就是写在数据类型的右边
@property (nonatomic,strong) Wife<WifeCondition> *wife;

- (void)show;
@end

>>>.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
```objc
>>>.h
#import <Foundation/Foundation.h>
#import "WifeCondition.h"
[@interface](https://my.oschina.net/u/996807) Wife : NSObject <WifeCondition>

[@end](https://my.oschina.net/u/567204)

>>>.m
#import "Wife.h"

@implementation Wife
// 会做饭
- (void)cooking
{
     NSLog(@"%s",__func__);
}
// 会洗衣服
- (void)washing
{
    NSLog(@"%s",__func__);
}
// 工作
- (void)job
{
    NSLog(@"%s",__func__);
}
@end

######WifeCondition
```objc
>>>.h
#import <Foundation/Foundation.h>

@protocol WifeCondition <NSObject>

// 会做饭
- (void)cooking;
// 会洗衣服
- (void)washing;
// 工作
- (void)job;

@end

转载于:https://my.oschina.net/u/3561184/blog/1475107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值