获得徽章 0
- #iOS知识小集# 「 Objective-C中自定义泛型类 」
最近看 Facebook 的 promise 源码,看到 FBLPromise 类定义为一个泛型类,所以就温习一下。
苹果在2015年就为 Objective-C 增加了泛型,我们现在用 Array、Dictionary、Set、HashTable 这些类时,一般都会使用泛型来指定元素的类型。除此之外,我们也可以自定义泛型类。如图1代码所示,我们定义了一个 Queue 泛型类,并使用了 ObjectType 作为泛型类型的占位符。然后 ObjectType 就可以用于 Queue 类的属性、方法参数、成员变量中,作为这些值的类型。
不过有两点需要注意:
1. ObjectType 只能用于类的声明中,即 @interface 和 对应的 @end 区间内。如果用在类的实现中,即 @implementation 中,编译器会报错,提示 “Excepted a type”。因此,在 @implementation 中,对应的需要改成 id 。如图1代码所示;
2. 在创建对象时,如果指定了泛型类型,那么在具体使用过程中,如果违反了规则,编译器会给出警告,如图2所示。不过仅此而已,在运行时,你依然可以传递其它类型的值。当然,如果创建对象时没有指定泛型类型,编译器也不会给出警告;
Objective-C 的泛型是所谓的 Lightweight Generics,主要是为了和 Swift 做混编,同时保证了与之前版本的兼容性。
更多知识小集的内容,请查看:t.cn ,也可以关注我们的公众号:iOS-Tips
@Lefe_x @Vong_HUST @高老师很忙 @故胤道长 @halohily展开44