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 esoptional
Stillnon-optional
, comoview?
conview!
. Y enObjective-C
No existe tal distinción en China.view
Puede significar que este objeto esoptional
También puede significar sínon-optional
. Esto causará un problema: enSwift
versusObjective-C
Al mezclar,Swift
El compilador no conoce unoObjective-C
El objeto esoptional
todavía esnon-optional
, por lo que en este caso el compilador implícitamenteObjective-C
Objeto comonon-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_BEGIN , NS_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 definidotypedef
Las características generalmente dependen del contexto, incluso sinullability
-Audited
En él, no puedes asumir que esRegions
。- Tipos de punteros complejos (como
nonnull
*) Deben mostrarse para especificar esid
non
sigue siendonull
. Por ejemplo, especifique un punteronullable
Objetonullable
Puntero, se puede usar 'nonnulla
*__nullable id
”。 - A menudo usamos
__nonnull
** generalmente se asume que es un apuntadorNSError
Objetonullable NSError
puntero.
Reimpreso en: https://www.jianshu.com/p/65d344264688