美文网首页八天学会OC
第07天OC语言(03):协议应用场景1-类型限定

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

作者: liyuhong | 来源:发表于2017-07-22 09:22 被阅读3次
  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

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

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

相关文章

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

    不要等到明天,明天太遥远,今天就行动。 须读:看完该文章你能做什么? 给某个类的对象让它遵循协议 学习前:你必须会...

  • OC语言day07-03协议应用场景1-类型限定

    pragma mark 协议应用场景1-类型限定 pragma mark 概念 pragma mark 代码 Pe...

  • 10-03、协议应用场景01-类型限定

    main.m WifeCondition.h Person.h Person.m Wife.h Wife.m

  • Swift比较

    1、Swift和OC的区别? 维度SwiftOC语言类型静态语言(有类型推断)动态语言面向类型面向协议编程面向对象...

  • 面试题

    Swift和OC的区别? 1.swift是静态语言,有类型推断,OC是动态语言。2.swift面向协议编程,OC面...

  • ios面试

    一、OC与Swift的区别 1.swift是静态语言,有类型推断,OC是动态语言。2.swift面向协议编程,OC...

  • swift面试题

    一.Swift和OC的区别? 1.swift是静态语言,有类型推断,OC是动态语言。 2.swift面向协议编程,...

  • iOS面试

    # 一、OC与Swift的区别 1.swift是静态语言,有类型推断,OC是动态语言。 2.swift面向协议编程...

  • Swift-协议

    一、概览 二、协议的定义和遵守 二、协议的继承和限定类遵守 三、方法参数要求多个协议 四、OC协议兼容 OC中协议...

  • 第06天OC语言(03):autorelease应用场景

    不要等到明天,明天太遥远,今天就行动。 须读:看完该文章你能做什么? 给一个类扩充一个对象/类方法的注意事项(在a...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/xorfkxtx.html