objective c - sistema - Nulabilidad de Objective-C: cadenas constantes de calificación
swift versions (2)
En su implementación, podría definir:
NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification";
en cuyo caso el puntero es claramente no nonnull
. Sin embargo, esto también es válido:
NSString * const ABCAwesomeThingHappenedNotification = nil;
que debe considerarse nullable
porque el puntero es siempre un puntero nulo.
(La inicialización explícita a nil
es redundante ya que esto ocurre implícitamente si no se proporciona un valor inicial, pero aclara este ejemplo).
Me he acostumbrado bastante a declarar y usar cadenas constantes para cosas como nombres de NSNotification
. Los declaro así:
extern NSString * const ABCAwesomeThingHappenedNotification;
Con la introducción de Xcode 6.3 y Swift 1.2, volveré y nonnull
clases de Objective-C que se interoperan con Swift utilizando los nuevos nonnull
, que nonnull
null_unspecified
y que no null_unspecified
.
Al agregar los calificadores a un encabezado que también tiene cadenas estáticas visibles externamente, recibo la siguiente advertencia:
advertencia: al puntero le falta un especificador de tipo de nulabilidad (__nonnull o __nullable)
Hmm Eso es confuso / interesante. ¿Alguien puede explicar el razonamiento detrás de este mensaje? Cuando se utiliza la ABCAwesomeThingHappenedNotification
en Swift, nunca sugiere que sea una cadena opcional o una cadena implícitamente desenvuelta.
Estoy de acuerdo en que no debería ser necesario tener este especificador, pero aquí hay una sintaxis
extern NSString * const MyConstant;
extern NSString * __nonnull const MyConstant;