美文网首页iOS技术
OC中的ObjectType是什么类型

OC中的ObjectType是什么类型

作者: Zip000 | 来源:发表于2020-11-03 19:56 被阅读0次

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

  • __covariant - 协变性,子类型可以强转到父类型。 如果有两个数据 UserModel<NSArray > a 和 UserModel<NSMutableArray> b,那么b复制给a是不会有警告的,但是a赋值给b的话就会出现警告。
  • __contravariant - 逆变性,父类型可以强转到子类型。同理,a 赋值给b是不会有警告的。

__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>

相关文章

  • OC中的ObjectType是什么类型

    ObjectType是Objective-C中的泛型 ObjectType的使用 自定义泛型只能在 @interf...

  • iOS swift-字符串

    OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC...

  • iOS 枚举类型的使用

    OC中的枚举类型

  • OC对象类型浅析

    OC中对象类型的分类 OC中对象类型可以分为如下三类: instance 实例对象 class 类对象 meta-...

  • ARC下所有权修饰符

    oc编程中为了处理对象,可将变量类型定义为id类型或各种对象类型。 所谓对象类型就是指向NSObject这样的oc...

  • 【Swift】runtime简单应用

    1、获取属性列表 2、模型中基本类型不能设置为可选类型,因为kvc是oc的,而oc中基本类型没有可选。 另外属性不...

  • 10.Swift中字符串的使用

    OC和swift中字符串的区别: 1.在OC中字符串的类型是NSString,swift中字符串的类型是Strin...

  • Swift第二课

    一.字符串 在OC中字符串类型是NSString,在swift中字符串类型是String OC中字符串@"",sw...

  • Swift基础语法-基本数据类型--对比OC

    OC中的基本数据类型 Swift中的基本数据类型注意:关键字大写 如果按照长度划分, Swift中的长短比OC更加...

  • Swift学习(四)---Optional

    一、Swift中可选项的出现 为了解决OC中的nil问题 OC中nil为无类型的指针 OC中的数组、字典、集合都不...

网友评论

    本文标题:OC中的ObjectType是什么类型

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