八天学会OC

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

2017-07-22  本文已影响3人  liyuhong
须读:看完该文章你能做什么?

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

学习前:你必须会什么?(在这里我已经默认你具备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 Wife : NSObject <WifeCondition>

@end

>>>.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

上一篇 下一篇

猜你喜欢

热点阅读