Considere o seguinte método
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Com as palavras-chave novas nonnull
e de nullable
anotação , podemos enriquecê-lo da seguinte maneira:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
mas também recebemos este aviso:
O ponteiro está sem um especificador de tipo de nulidade (__nonnull ou __nullable)
Refere-se ao terceiro parâmetro (o bloco um).
A documentação não cobre com exemplos como especificar a nulidade dos parâmetros de bloco. Afirma literalmente
Você pode usar as formas não sublinhadas anuláveis e não nulas imediatamente após um parêntese aberto, desde que o tipo seja um objeto simples ou um ponteiro de bloco.
Tentei colocar uma das duas palavras-chave para o bloco (em qualquer posição) sem sucesso. Também tentei as variantes prefixadas de sublinhado (__nonnull
e __nullable
).
Portanto, minha pergunta é: como posso especificar a semântica de nulidade para parâmetros de bloco?
NSError **
tipo? Não consigo deixar o compilador feliz.