iOS9新特性之泛型

  • 泛型:限制类型
    为什么要推出泛型?迎合swift
  • 泛型作用
    1.限制类型
    2.提高代码规范,减少沟通成本,一看就知道集合中是什么东西
  • 泛型声明:在声明类的时候,在类的后面<泛型名称>
  • 泛型定义用法:类型<限制类型>(使用类创建对象的时候)
  • 泛型仅仅是报警告
  • 泛型好处:
    1.从数组中取出来,可以使用点语法
    2.给数组添加元素,有提示
  • 泛型在开发中使用场景:用于限制集合类型
  • id是不能使用点语法
  • 为什么集合可以使用泛型?使用泛型,必须要先声明泛型? => 如何声明泛型
  • 自定义泛型?
  • 什么时候使用泛型:在声明类的时候。不确定某些属性或者方法类型,在使用这个类的时候才确定,就可以采用泛型
  • 如果没有定义泛型,默认就是id
  • 用于父子类型转换
    泛型: __covariant: 协变,子类转父类
    __contravariant: 逆变,父类转子类
  • 泛型注意点:在数组中,一般用可变数组添加方法,泛型才会生效,如果使用不可变数组,添加元素,泛型没有效果
    泛型也仅仅是报警告,并不会报编译错误
使用泛型
@property (nonatomic, strong) NSMutableArray<NSString *> *array;
//这样可变数组中只能存字符串类型
声明泛型(Person类)
@class Language
@interface Person<ObjectType> ()
@property (nonatomic, strong) Language<ObjectType> *language;
@end
定义泛型
Person<iOS *> *person = [[Person alloc] init];
person.language = ios;
//这样我们就可以给person对象中language属性只传ios的对象,其他类型就会警告
协变与逆变
  • 在这里我们创建两个类Animal和他的子类Dog.
//测试代码
Stack <Dog *> *stack1 = [Stack new];
Stack <Animal *> *stack2 = [Stack new];
stack1 = stack2;
stack2 = stack1;
协变
// 协变 子类指向父类
@interface Stack <__covariant T : Animal *> : NSObject

在这里插入图片描述

逆变
// 逆变 父类指向子类
@interface Stack <__contravariant T : Animal *> : NSObject

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iOS开发疯狂者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值