iOS9新出的关键字,用来修饰属性,或者方法的参数,方法的返回值
好处:
- 迎合swift
- 提高我们开发人员开发规范,减少程序员之间的交流
nullable和nonnull
nullable
:表示可以为空,nonnull
为非空
只能修饰对象,不能修饰int等,因为nil只能赋值给对象
书写规范一样,以nullable
为例:
- 方式一:
|
|
- 方式二:
|
|
- 方式三:
|
|
- 方式四:修饰方法
|
|
- 方式五:
在NS_ASSUME_NONNULL_BEGIN
和NS_ASSUME_NONNULL_END
之间定义的所有对象属性和方法默认都是nonnull
。
|
|
null_resettable
|
|
null_resettable
必须重写setter
或者getter
方法,处理传递的值为空的情况(实际重写不判断为空警告也没了),不然会有警告。
null_unspecified
null_unspecified
不确定是否为空
|
|
泛型
泛型:限制类型
泛型使用场景:
- 在集合(数组、字典、
NSSet
)中使用泛型比较常见。 - 当声明一个类。类里面的某些属性的类型不确定,这时候我们才使用泛型。
泛型好处:
- 提高开发规范,减少程序员之间交流
- 通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法
|
|
|
|
__covariant
(协变): 用于泛型数据强转类型,可以向上强转,子类可以转成父类。
|
|
__contravariant
(逆变): 用于泛型数据强转类型,可以向下强转,父类可以转成子类。12@interface Person<__contravariant ObjectType> : NSObject@end
__kindof
__kindof
表示当前类或者它的子类
好处:
- 可以在编译的时候,检查真实类型
- 返回值会有提示修饰的当前类
|
|