Considera il seguente metodo
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Con le parole chiave nuove nonnull
e nullable
annotazioni possiamo arricchirlo come segue:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
ma riceviamo anche questo avviso:
Nel puntatore manca un identificatore di tipo nullability (__nonnull o __nullable)
Si riferisce al terzo parametro (quello del blocco).
La documentazione non copre con esempi come specificare il nullability dei parametri di blocco. Afferma testualmente
È possibile utilizzare i moduli senza sottolineatura nullable e nonnull immediatamente dopo una parentesi aperta, purché il tipo sia un oggetto semplice o un puntatore a un blocco.
Ho provato a mettere una delle due parole chiave per il blocco (in qualsiasi posizione) senza fortuna. Ho anche provato le varianti con il carattere di sottolineatura ( __nonnull
e__nullable
).
Pertanto la mia domanda è: come posso specificare la semantica nullability per i parametri di blocco?
NSError **
tipo? Non riesco a rendere felice il compilatore.