usos sistema programacion origen operativo lenguaje caracteristicas apple objective-c swift objective-c-nullability

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;