iOS技术

OC中的ObjectType是什么类型

2020-11-03  本文已影响0人  Zip000

ObjectType是Objective-C中的泛型

ObjectType的使用

  1. 自定义泛型只能在 @interface 上定义(类声明、类扩展、Category),这个类型在 @interface 和 @end 区间的作用域有效。可以认为是一个模板。模板名称可以自己定义。如下:
NS_ASSUME_NONNULL_BEGIN
@interface UserModel<__covariant ObjectType> : NSObject

@property(nonatomic,strong,nullable) ObjectType object;
- (void)pushObject:(ObjectType)object;
- (__kindof ObjectType)value;
@end

NS_ASSUME_NONNULL_END

默认情况下,系统会把ObjectType当做id类型来处理。当然我们也可给泛型限制类型。

NS_ASSUME_NONNULL_BEGIN
@interface UserModel<__covariant ObjectType:NSNumber *> : NSObject

@property(nonatomic,strong,nullable) ObjectType object;
- (void)pushObject:(ObjectType)object;

@end

NS_ASSUME_NONNULL_END

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

泛型书写规范
在类型后面定义泛型,NSMutableArray<UITouch *> *datas

泛型好处:
1.提高开发规范,减少程序员之间交流
2.通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法

__covariant 和 __contravariant

__kindof 表示是否是该类型的数据

@property (nonatomic, readonly, copy) NSArray<__kindof UIView *> *subviews;

UIButton *button = view.subviews.lastObject;

有了__kindof button 赋值就不会有警告了。

https://shenfh.github.io/2016/12/14/ObjectType/

@interface NSMutableArray<ObjectType> : NSArray<ObjectType>

上一篇 下一篇

猜你喜欢

热点阅读