nonull nullable

在swift中,我们使用 !? 来表示一个对象是 optionalnon-optional, 例如:
view? 和 view!
但是在swift与Objective-c混编时,swift编译器并不知道objective-c对象到底是optional还是non-optional,因为这种情况下编译器会隐式地将object-c对象当成是 non-optional

为了解决这个问题,苹果在Xcode 6.3引入了一个Objective-C的新特性:nullability annotations。这一新特性的核心是两个新的类型注释:__nullable和__nonnull。

从字面上我们可以猜到,__nullable表示对象可以是NULL或nil,而__nonnull表示对象不应该为空。当我们不遵循这一规则时,编译器就会给出警告。

我们来看看以下的实例:

Paste_Image.png

当我传入的参数有 nonnull修饰时,说明参数不能为nil,否则编译器就会报警告

Paste_Image.png

当属性用nonnull修饰时,说明该属性不能为nil,否则编译器就会报警告

如果需要每个属性或每个方法都去指定nonnull和nullable,是一件非常繁琐的事,怎么办呢?
Paste_Image.png

苹果为了减轻我们的工作量,专门提供了两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针。如下代码所示:


Paste_Image.png

在这两个宏之间的都是 nonnull 类型的,不能直接设置为nil

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容