iOS9新特性之泛型(协变,逆变)

871 阅读1分钟

1 __covariant(协变):用于泛型数据强转类型,可以向上强转,子类 可以转成 父类

2 __contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类 可以 转成子类

@interface NSMutableArray<ObjectType> : NSArray<ObjectType>
@end
@interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>
@end
@interface Language : NSObject
@end

@implementation Language
@end

@interface Java : Language
@end

@implementation Java
@end

@interface IOS : Language
@end

@implementation IOS
@end

// 声明泛型 __covariant(协变):用于泛型数据强转类型,可以向上强转,子类 可以转成 父类
@interface Person<__covariant ObjectType> : NSObject
// 语言
@property (nonatomic)  ObjectType language;
@end


 // 泛型父类 Language
 Person<Language *> *p = [[Person alloc] init];
    
 // 泛型子类 iOS
 Person<IOS *> *iosP = [[Person alloc] init];
    
 // 如果子类想给父类赋值,协变
 p = iosP;
// __contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类 可以 转成子类
@interface Person<__covariant ObjectType> : NSObject
// 语言
@property (nonatomic)  ObjectType language;
@end


 // 泛型父类 Language
 Person<Language *> *p = [[Person alloc] init];
    
 // 泛型子类 iOS
 Person<IOS *> *iosP = [[Person alloc] init];
    
 // 如果父类想给子类赋值,逆变
 iosP = p;