NS_ASSUME_NONNULL_BEGIN y NS_ASSUME_NONNULL_END

Ns_assume_nonnull_begin Ns_assume_nonnull_end

Todos sabemos que Swift ¡En, puedes usar! y ? para indicar que un objeto es optional Still non-optional, como view? con view!. Y en Objective-C No existe tal distinción en China. view Puede significar que este objeto es optional También puede significar sí non-optional. Esto causará un problema: en Swift versus Objective-C Al mezclar, Swift El compilador no conoce uno Objective-C El objeto es optional todavía es non-optional, por lo que en este caso el compilador implícitamente Objective-C Objeto como non-optional

problema resuelto

Apple en Xcode 6.3 Introdujo un Objective-C Nuevas funciones: nullability annotations. En el corazón de esta nueva función hay dos nuevas anotaciones de tipo: __nullable con __nonnull . Literalmente podemos adivinar, __nullable Indica que el objeto puede ser NULL o nil, y __nonnull Indica que el objeto no debe estar vacío. Cuando no seguimos esta regla, el compilador dará una advertencia.



Si necesita especificar cada atributo o cada método nonnull con nullable es una cosa muy tediosa. Para aliviar nuestra carga de trabajo, Apple ha proporcionado dos macros: NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END . En el código entre estas dos macros, se supone que todos los objetos punteros simples son nonnull Por lo que solo necesitamos especificar esos nullable Puntero.



|_+_|

Reglas de uso

  • NS_ASSUME_NONNULL_BEGIN @interface TestObject : NSObject @property (nonatomic, strong) NSString *testString @property (nonatomic) BOOL isRight @end NS_ASSUME_NONNULL_END Tipo definido typedef Las características generalmente dependen del contexto, incluso si nullability - Audited En él, no puedes asumir que es Regions
  • Tipos de punteros complejos (como nonnull *) Deben mostrarse para especificar es id non sigue siendo null. Por ejemplo, especifique un puntero nullable Objeto nullable Puntero, se puede usar 'nonnulla * __nullable id ”。
  • A menudo usamos __nonnull ** generalmente se asume que es un apuntador NSError Objeto nullable NSError puntero.

Reimpreso en: https://www.jianshu.com/p/65d344264688