zoukankan      html  css  js  c++  java
  • iOS9新特性之泛型

     iOS9新特性之泛型

    作用:限制类型

    好处:1.提高开发规范,减少程序员之间的交流

          2.通过集合取出来的对象,直接当作泛型对象使用,可以直接使用点语法(id类型不能使用点语法)

    使用场景: 1.在集合(数组、字典、NSSet)中使用泛型比较常见

               2.当声明一个类,类里面的某些属性的类型不确定,这时候才使用泛型

    书写规范:

    场景1示例

    @property (nonatomic ,strong)NSMutableArray<NSString*> *datas;

    场景2示例

    Person类中

    #import <Foundation/Foundation.h>

    #import "Language.h"

    #import "iOS.h"

    #import "Java.h"

    @interface Person<languageType,companyType> : NSObject

    @property (nonatomic)  languageType language;

    @property (nonatomic)  companyType company;

    @end

    ViewController类中

    #import "ViewController.h"

    #import "Person.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        Person *person = [[Person alloc] init];

        person.language = @"123";

       // 不限制类型时,相当于id类型

        Person<iOS *,NSString *> *person1 = [[Person alloc] init];

        person1.language = [[iOS alloc] init];

        person1.company = @"百度有限公司";

        Person<Java *,NSArray *> *person2 = [[Person alloc] init];

        person2.language = [[Java alloc] init];

        person2.company = @[@"百度有限公司"];

     }

    @end

    泛型的协变与逆变

    协变:__covariant用于泛型数据强转类型,可以向上强转,子类可以转成父类

    Person类中

    #import <Foundation/Foundation.h>

    #import "Language.h"

    #import "iOS.h"    (iOS的父类为Language).

    @interface Person<__covariant languageType> :NSObject

    @property (nonatomic)  languageType language;

    @end

    ViewController中

        Person<Language *> *person = [[Person alloc] init];

        Person<iOS *> *person1 = [[Person alloc] init];

    person = person1; //子类给父类赋值

    逆变 :__contravariant用于泛型数据强转类型,可以向下强转,父类可以转成子类

    @interface Person<__ contravariant languageType> :

        person1 = person; //父类给子类赋值

  • 相关阅读:
    python简单文件服务器
    Qt5WebSockets
    cartographer ros 配置项
    ubuntu18.04 evo 测评工具安装
    ubuntu18.04 orb_slam2安装记录
    clonezilla使用说明
    会计报名
    将博客搬至CSDN
    JS--微信浏览器复制到剪贴板实现
    Python--Django学习笔记2
  • 原文地址:https://www.cnblogs.com/culing/p/5715556.html
Copyright © 2011-2022 走看看