博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS9新特性之泛型
阅读量:5260 次
发布时间:2019-06-14

本文共 1573 字,大约阅读时间需要 5 分钟。

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

转载于:https://www.cnblogs.com/culing/p/5715556.html

你可能感兴趣的文章
Linux OpenGL 实践篇-16 文本绘制
查看>>
项目:Android平台txt阅读软件
查看>>
解决Spring MVC报No converter found for return value of type:class java.util.ArrayList问题
查看>>
关系代数和sql语句对应关系
查看>>
jQuery-ui treegird 使用
查看>>
插件笔记——dataTables使用说明
查看>>
Linux 下node环境安装
查看>>
Python 字典(Dictionary) 小菜鸟学Python
查看>>
隐式类型转换规则
查看>>
Linux Shell命令-----VI
查看>>
APS系统如何让企业实现“多赢”?看高博通信是怎么做的
查看>>
ERROR StatusLogger No log4j2 configuration file found. Using default configuration
查看>>
POJ 1321 DFS
查看>>
Linux下查看文件和文件夹大小 删除日志
查看>>
我的OI生涯 第三章
查看>>
springboot-shiro chapter03 login
查看>>
linux基本命令(1) 开关机操作
查看>>
第十周
查看>>
block,inline,inline-block的区别
查看>>
PLSQL连接Oracle数据库,使用instantclient_10_2客户端
查看>>