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; //父类给子类赋值

  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/culing/p/5715556.html
Copyright © 2011-2022 走看看