iOS 开发中的泛型

作者: 童话镇里蜿蜒的河 | 来源:发表于2019-07-09 16:54 被阅读5次

    在iOS开发中,泛型的使用,可以减少沟通的成本,明确类型。
    相信大家在开发中,或多或少,都接触或使用过泛型。比如在定义一些装有特定类型的数组时,会这样写

    NSMutableArray <CarModel *> *dataSource
    

    这样就表明了,dataSource这个数组中,放的是CarModel。使用objectForKey 可以直接用点语法,点出模型内部的属性进行使用。

    [self.dataSource objectAtIndex:0].property;
    

    在给数组添加数据时,也会有提示指明数组中的类型。

    [self.dataSource addObject:(nonnull CarModel *)];
    

    如果添加了错误的类型,会有警告。

    [self.dataSource addObject:@""];
    Incompatible pointer types sending 'NSString *' to parameter of type 'CarModel * _Nonnull'
    

    自定义泛型类

    在声明类的时候,不确定某些属性或者方法类型,在使用这个类的时候才确定,就可以采用泛型。
    在声明类的时候,在类的后面<泛型名称>

     @interface Person<__covariant ObjectType> : NSObject
    
     @property (nonatomic, strong) ObjectType language;
    
    
    Language : NSObject
    #import <Foundation/Foundation.h>
    
    @interface Language : NSObject
    
    @end
    
    .Java : Language
    #import "Language.h"
    
    @interface Java : Language
    
    @end
    
    .iOS : Language
    #import "Language.h"
    
    @interface iOS : Language
    
    @end
    
    - (void)test
    {
        Java *java = [[Javaalloc]init];
    
        iOS *ios = [[iOSalloc]init];
    
      
        // iOS  指定这个人会的是iOS
    
        Person<iOS *> *p = [[Personalloc]init];
    
        p.language = ios;
    
     
        // Java   指定这个人会的是Java
    
        Person<Java *> *p1 = [[Personalloc]init];
    
        p1.language = java;
    
    }
    

    __covariant:协变, 子类转父类
    __contravariant:逆变 父类转子类

    规范是死的,人是活的。 不能说我们定义了规范,就必须使用泛型。
    如果需求是:数组内,分别有不同类型的对象,你还在纠结怎么用泛型。。。
    总之,要具备这样的思想,而不是很刻板的去遵守。

    相关文章

      网友评论

        本文标题:iOS 开发中的泛型

        本文链接:https://www.haomeiwen.com/subject/vrqahctx.html