Considere el siguiente método
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Con las palabras clave nuevas nonnull
y de nullable
anotación podemos enriquecerlo de la siguiente manera:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
pero también recibimos esta advertencia:
Al puntero le falta un especificador de tipo de nulabilidad (__nonnull o __nullable)
Se refiere al tercer parámetro (el bloque uno).
La documentación no cubre con ejemplos cómo especificar la nulabilidad de los parámetros de bloque. Dice textualmente
Puede utilizar los formularios no subrayados que aceptan nulos y no nulos inmediatamente después de un paréntesis abierto, siempre que el tipo sea un objeto simple o un puntero de bloque.
Intenté poner una de las dos palabras clave para el bloque (en cualquier posición) sin suerte. También probé las variantes con prefijo de subrayado ( __nonnull
y __nullable
).
Por lo tanto, mi pregunta es: ¿cómo puedo especificar la semántica de nulabilidad para los parámetros de bloque?
NSError **
tipo? Parece que no puedo hacer feliz al compilador.