zoukankan      html  css  js  c++  java
  • oc65--协议应用1,接口.做数据类型限定

    //  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 0;
    }
  • 相关阅读:
    如何使用 Pylint 来规范 Python 代码风格
    linux中强大且常用命令:find、grep
    linux tar 命令
    linux xargs 命令详解
    Python3.x和Python2.x的区别-转
    linux下svn命令大全
    vim---打造Python IDE
    iPhone图片拉伸:resizableImageWithCapInsets
    OC语言构造方法
    OC语言@property @synthesize和id
  • 原文地址:https://www.cnblogs.com/yaowen/p/7437090.html
Copyright © 2011-2022 走看看