Considérez la méthode suivante
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Avec les mots-clés new nonnull
et nullable
annotation, nous pouvons l'enrichir comme suit:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
mais nous obtenons également cet avertissement:
Le pointeur n'a pas de spécificateur de type de nullabilité (__nonnull ou __nullable)
Il fait référence au troisième paramètre (le bloc un).
La documentation ne couvre pas avec des exemples comment spécifier la nullité des paramètres de bloc. Il déclare textuellement
Vous pouvez utiliser les formes non soulignées Nullable et Nonnull immédiatement après une parenthèse ouverte, à condition que le type soit un simple objet ou un pointeur de bloc.
J'ai essayé de mettre l'un des deux mots-clés pour le bloc (dans n'importe quelle position) sans aucune chance. Également essayé les variantes préfixées de soulignement ( __nonnull
et __nullable
).
Par conséquent, ma question est: comment puis-je spécifier la sémantique de nullabilité pour les paramètres de bloc?
NSError **
type? Je n'arrive pas à rendre le compilateur heureux.