目标C中什么是非空的?

Meh*_*mar 14 initialization objective-c ios ios9 xcode7

有人可以详细说明为什么nonnull在iOS 9中引入?

例如,该NSArray方法+ (instancetype)array;现在+ (instancetype nonnull)array;

请参阅:https: //developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/frameworks/Foundation.html

这是一个客观的c级功能,这将如何影响现有的应用程序?

Mru*_*nal 17

他们已经确保无论类型不可为空,它现在都是一种nonnull类型.

像以前的NSMutableArray addObject方法一样

- (void)addObject:(ObjectType)anObject  
Run Code Online (Sandbox Code Playgroud)

现在它已改为

- (void)addObject:(ObjectType nonnull)anObject
Run Code Online (Sandbox Code Playgroud)

因此,这意味着您无法将null对象(nil)传递给此方法.同样,在你的情况下

+ (instancetype nonnull) array
Run Code Online (Sandbox Code Playgroud)

方法永远不会回来nil.

参考:https://developer.apple.com/swift/blog/?id = 25


rou*_*nak 9

nonnull是一个关键字,告诉编译器返回值(或参数或属性)永远不会是nil.这是在以前版本的Xcode中引入的,以便在Obj-C和Swift的可选类型之间实现更好的互操作性.

您可以在官方Swift博客上了解更多相关信息

  • 你的意思是"永远不会*故意*为零". (6认同)
  • @ gnasher729 - 基于我在这里看到的问题,人们会经常尝试. (2认同)

Nil*_*tel 6

nonnullis 关键字通知编译器对象/参数返回的值永远不会是nil

一般来说,您应该大致以当前使用断言或异常的方式来看待可为空和非空:违反约定是程序员的错误。特别是,返回值是您可以控制的,因此您不应该为不可为 null 的返回类型返回 nil ,除非是为了向后兼容。