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

  • 相关阅读:
    百度云盘下载限速破解
    (五)Struts之Action类基础(二)
    (四)Decorator设计模式解决GET/POST请求的乱码问题(转)
    (三)Struts之Action类基础(一)
    (二)Struts.xml文件详解
    (一)Struts2 基础
    (三十一)web 开发基础项目
    mysql的索引
    数据库的acid
    String StringBuffer和StringBuilder
  • 原文地址:https://www.cnblogs.com/culing/p/5715556.html
Copyright © 2020-2023  润新知