美文网首页
OC语言day07-03协议应用场景1-类型限定

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

作者: liyuhong165 | 来源:发表于2016-06-30 23:25 被阅读51次

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

    pragma mark 概念

    pragma mark 代码

    ###import <Foundation/Foundation.h>
    #pragma mark 类
    #import "Person.h"  // 人
    #import "Wife.h"    // 妻子
    #import "WifeCondtion.h"    // 协议
    #pragma mark main函数
    int main(int argc, const char * argv[])
    {
        // 某个工程师 希望找个会做饭、洗衣服的女朋友。有工作优先
        // 满足条件的女生可以发消息
        
        // 会做饭 \
           会洗衣服 \
           有份好工作 \
        
    #pragma mark code
        Person *p = [Person new];
    #warning 协议的应用场景 找妻子要3个要素: 会做饭、洗衣服、有工作
        // 1.协议的第一个应用场景,可以将协议写在数据类型的右边
        // 明确的标注 如果想给该变量赋值,那么该对象必须遵守某个协议
        Wife<WifeCondtion> *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<WifeCondtion> *wife;   // 人的妻子 必须会做饭、洗衣服、有工作
    
    - (void)show;
    @end
    
    Person.m
    #import "Person.h"
    #import "WifeCondtion.h"
    @implementation Person
    
    - (void)show
    {
        //   注意: 虽然在接受一个对象的时候,对这个对象进行了类型限定(限定它必须实现某个协议),
        //但是并不意味着这个对象是 就真正的实现了该方法, 所以每次在调用对象的协议方法是应该进行一次验证
        
        // 通过 respondsToSelector 会去查找这个方法有没有实现了 如果会返回一个BOOL值
        
        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 "WifeCondtion.h"
    
    @interface Wife : NSObject <WifeCondtion>
    
    @end
    
    Wife.m
    #import "Wife.h"
    
    @implementation Wife
    
    // 会做饭
    - (void)cooking
    {
        NSLog(@"%s",__func__);
    }
    // 会洗衣服
    - (void)washing;
    {
        NSLog(@"%s",__func__);
    
    }
    // 有工作
    - (void)job
    {
        NSLog(@"%s",__func__);
    
    }
    @end
    

    WifeCondtion.h //妻子协议
    #import <Foundation/Foundation.h>
    
    @protocol WifeCondtion <NSObject>
    
    // 会做饭
    - (void)cooking;
    // 会洗衣服
    - (void)washing;
    // 有工作
    - (void)job;
    @end
    

    相关文章

      网友评论

          本文标题:OC语言day07-03协议应用场景1-类型限定

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