很早之前总结了一篇Xcode新特性,当时写得很赶,现在看看是在算不上记录!今天正好有同事在咨询我这方面的事情,就花了点时间好好梳理了一遍!
上述图片可以总结完所有Objective-C的新特性,而且在这些新特性是纯编译器的语法支持(llvm 7.0),没有借助任何 objc runtime 的升级,也就是说,这个新语法在 Xcode 7 上可以使用且完全向下兼容(更低的 iOS 版本)。
将要说明一下:
第3行:NS_ASSUME_NONNULL_BEGIN
声明包在该宏里面的对象默认加 nonnull 修饰符
第36行:3行声明结束
第6行:可以对property指定nonnull
第15行:null_resettable
可以表示property setter nullable
第17行:表示数组每个元素为 XPHouse类型 或 XPHouse子类(__kindof
)
第19行:NS_DESIGNATED_INITIALIZER
表示默认构造器、instancetype
第25行:__covariant
表示协变性,子类型可以强转到父类型(里氏替换原则);还有个__contravariant
表示逆变性,父类型可以强转到子类型(没有表达出来);T表示泛型
第32行:__nullable
指定参数可能为null