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

  • 相关阅读:
    稀疏自编码器一览表
    ZOJ 3886 Nico Number(筛素数+Love(线)Live(段)树)
    K好数(DP)
    【BZOJ4025】二分图
    又一次认识java(七) ---- final keyword
    二分查找
    从朴素贝叶斯分类器到贝叶斯网络(下)
    最近感到深深的绝望,感觉自己太菜了
    leetcode No.19 删除链表的倒数第N个节点 (python3实现)
    leetcode No.94 二叉树的中序遍历 (python3实现)
  • 原文地址:https://www.cnblogs.com/culing/p/5715556.html
Copyright © 2011-2022 走看看