iOS 9 关键字的简单使用

作者: 判若两人丶 | 来源:发表于2016-06-28 10:41 被阅读1884次

前言:

在iOS 9 苹果推出了很多关键字, 目的其实很明确, 主要就是提高开发人员的效率, 有益于程序员之间的沟通与交流, 在开发中代码更加规范!

**1. nullable 与 nonnull **

nullable : 表示可以为 nil
nonnull : 表示不可以为 nil
这两个关键字只能修饰对象, 不能修饰基本数据类型, 可以用在属性, 方法的参数, 方法的返回值使用, 在默认情况下, 不加nullable, setter 和 getter 都是可以为nil

我们来看下如何使用, 以nullable为例如下:

@property (nonatomic, strong, nullable) NSArray *array;
@property (nonatomic, strong) NSArray * __nullable array;
@property (nonatomic, strong) NSArray * _Nullable array;

在方法中怎么使用呢? 我们来看看:

- (nonnull NSString *)testString:(nonnull NSString *)string;
- (NSString * _Nonnull)testString:(NSString * _Nonnull)string;
- (NSString * __nonnull)testString:(NSString * __nonnull)string;

我们在调用属性或者方法时候, 系统会提示你当前的对象是否为nil如下图:

test1
test2
另外还有2个宏如下:
 NS_ASSUME_NONNULL_BEGIN
 NS_ASSUME_NONNULL_END

在这两个宏之间的所有对象属性默认都是nonnull

关键字: null_resettable

getter :不可以为nil
setter :可以为nil
如果使用 null_resettable 就必须重写 getter或者setter方法. 目的是为了处理值为空的情况
使用方法如下:

@property (nonatomic, strong, null_resettable) UIView *testView;
关键字: _Null_unspecified

不确定是否为空, 此关键字个人感觉意义不是很大, 因为对象属性默认就是不确定的
使用方法如下:

 @property (nonatomic, strong) UIView * _Null_unspecified testView;
 @property (nonatomic, strong) UIView * __null_unspecified testView;

**2. 泛型 **

通过使用泛型, 我们可以非常容易地获取其中的元素,并访问其特有的属性和方法, 一般使用在集合中使用(例如:数组,字典), 当方法调用的时候才有效果, 我们来看看如何使用:

//属性使用
@property (nonatomic, strong) NSMutableArray<NSString *> *testArrayM;
//在方法中使用
- (NSArray<NSString *> *)testStringArray:(NSArray<NSString *> *)stringArray;

我们在数组中使用泛型, 之后我们可以很明确知道数组中是什么类型如下图:

在方法中使用泛型.png
在NSMutableArray中使用泛型.png

并且在上图我们可以了解到, 在集合里规定对象的类型, 通过集合取出来的对象可以当做泛型来使用, 并且可以直接用点语法, 可想而知泛型的好处是非常强大的!

协变/逆变
  • __covariant: 协变, 用于数据强制转换类型(子类可以转变父类)
  • __contravariant :逆变, 用于数据强制转换类型(父类可以转变子类)

**3. __kindof **

表示当前类, 或者它的子类(__kindof使用: 放在类型前面, 表示修饰此类型)
我们先从 id 开始说起

  • 最开始我们方法的返回值不确定,我们会使用 id 但是使用它会有不好之处, id在编译的时候不能检查真实类型, 并且返回值没有提示
  - (id)testStringArray:(NSArray *)stringArray;
返回值使用id没有提示.png
  • 所以苹果出现了 instancetype 它会自动识别当前对象是哪个类, 只能在返回值中使用, 但是在调用方法时候还是不知道返回什么类型
- (instancetype)testStringArray:(NSArray *)stringArray;
instancetype在编译能自动识别类型.png
  • 最后苹果推出了 __kindof 它在调用时候很清楚的知道返回的类型, 在我们之前很多地方需要强制类型转换, 有了它就方便了很多
- (__kindof NSArray *)testStringArray:(NSArray *)stringArray;
__kindof使用.png

觉得能帮助你的小伙伴点赞一个,欢迎留言交流提出不足之处!

相关文章

  • iOS 9 关键字的简单使用

    前言: 在iOS 9 苹果推出了很多关键字, 目的其实很明确, 主要就是提高开发人员的效率, 有益于程序员之间的沟...

  • iOS9 相关

    iOS9 相关 iOS9新出关键字 nonnull,nullable,null_resettable,_Null_...

  • iOS9新特性之关键字

    iOS9新特性之关键字 iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值 好处:1.迎合swift...

  • 检测API可用性

    if #available(iOS 9, OSX 10.10, *) { // 在 iOS 使用 iOS 9 的 ...

  • iOS9新特性

    01-iOS9新特性之关键字 iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值 好处:1.迎合sw...

  • iOS 开发基础(10)-- iOS9新特性总结

    关键字 iOS9新出的关键字主要有: nullable,nonnull,null_resettable,null_...

  • iOS 9新特性、泛型、__kindof的使用

    iOS 9新特性关键字:nonnull、nullable、null_resettable 注意这几个关键字都是用来...

  • iOS9新特性

    iOS9新增的一些新特性 1.关键字 iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值好处1.迎合...

  • iOS9关键字的使用

    1.__contravariant 逆变 用于数据强制转类型,可以向下强转,父类可以转为子类 2.__covari...

  • 国家: http://int.dpool.sina.com.c

    iOS9获取所在城市的接口及解析(简单的NSURLSession使用和新的编码方法使用)

网友评论

  • QihuaZhou:泛型,学习了!! :+1:
    判若两人丶: @周鶏 有帮助就好,谢谢支持。
  • ADELEX:我只想说一句,特么博主你每篇文章对我都有用感觉,通通看完了只能!赞一个
    ADELEX:@判若两人丶 楼主别怕,我只是感叹下!
    判若两人丶:@ADELEX 这语气很吓人。
  • JammyT:很好的解释,只是我觉得苹果推这些东西,可能还是为了oc和swift更好的相互转换
    囧rg:@唐永祥 有道理。单独放到OC中,用处不是很大。
    判若两人丶: @唐永祥 苹果的确在主推 swift。

本文标题:iOS 9 关键字的简单使用

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