美文网首页
OC泛型简单应用

OC泛型简单应用

作者: Arthur澪 | 来源:发表于2020-03-25 11:44 被阅读0次

从 Xcode 7 以后 Objective-C支持了泛型 (Generics) 的使用。
泛型就是没有规定类型,在使用的时候决定类型。

语法:类型<限制类型>。如:NSArray<NSString *>

使用场景

1.在集合(数组,字典,NSSet)中使用泛型比较常见。
2.当声明一个类,类里面的某些属性的类型不确定,这时候我们才使用泛型。

泛型的作用

  • 限制集合的元素的类型。提高代码规范,减少沟通成本。

如:创建一个只能存放NSString类型的数组

NSMutableArray< NSString *> *array = [NSMutableArray array];

如:声明一个只能存放UIViewController类型的数组属性

@property (nonatomic, copy) NSArray<UIViewController *> *viewControllers;

这里的数组,元素确定是UIViewController类型,如果你在添加元素时不是UIViewController类型就会有警告。另外,它的子类也会有警告,这个时候就需要用到__kindof关键字。

@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;

__kindof:作用就是扩展泛型,让泛型支持子类。

这样写了之后,即使在数组中添加了UIViewController子类也不会有警告。

  • 方便访问集合的对象属性
@property (nonatomic,strong) NSArray <PDCar *> *dataSource;

没有泛型,要访问一个数组内部对象的属性,只能通过 getter,不能使用点语法,因为通过 index 取的返回值是 id 类型。

使用泛型后,返回值的类型是确定的。可以点语法直接访问元素的属性。

float p = self. dataSource[0].price;

泛型+协议

如果声明泛型时,同时希望对象响应特定的方法/属性,那么可以在泛型上附加协议。

@protocol SomeProtocol <NSObject>

@property (nonatomic, copy) NSString *name;
@end

...

@interface ViewController ()

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSArray <UIViewController <SomeProtocol> *> *array;

// 调用
- (void)useGenericProtocol {
    NSString *name = self.array.firstObject.name;
    NSLog(@"name-> %@", name);
}

@end

相关文章

  • OC泛型简单应用

    从 Xcode 7 以后 Objective-C支持了泛型 (Generics) 的使用。泛型就是没有规定类型,在...

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

  • Swift 泛型简单应用

    泛型从字面来理解就是一种泛指的类型,通过在类、方法、接口等指定泛型的类型,可以避免重写,达到重用的目的,而且可以通...

  • [iOS][OC] 理解并应用OC的泛型提高代码质量

    理解泛型 Generics 从 Xcode 7 以后 Objective-C(后称OC) 支持了泛型 Generi...

  • Java泛型 --(1)泛型基础篇

    主要内容 (1)能够定义简单的泛型类、泛型方法(2)知晓类型变量的限定规则和应用(3)理解虚拟机是如何解析泛型代码...

  • Web笔记-基础加强

    泛型高级应用 自定义泛型方法 自定义泛型类 泛型通配符? 泛型的上下限 泛型的定义者和泛型的使用者 泛型的定义者:...

  • Swift with Cocoa and Object-C(第二

    Lightweight Generics(轻量级泛型)### OC类型声明用轻量级泛型规范等同于Swift内容的限...

  • 泛型简单的应用总结:

    泛型可以应用在类,方法,接口中,可以定义泛型类,泛型方法,泛型接口三种 利用泛型的好处: 可以有效的减少代...

  • swift4 泛型(一)

    swift 泛型 OC 是没有泛型也不支持命命空间的,但是swift中这两者都有,本章主要介绍 泛型 对于iOS开...

  • swift泛型约束

    泛型在实际应用中往往要给泛型添加约束。简单举一个例子: 在上面的代码中where T: Codable, U: C...

网友评论

      本文标题:OC泛型简单应用

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