Rozważ następującą metodę
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Dzięki nowym słowom kluczowymnonnull
i nullable
adnotacjom możemy go wzbogacić w następujący sposób:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
ale otrzymujemy również to ostrzeżenie:
We wskaźniku brakuje specyfikatora typu dopuszczalności wartości null (__nonnull lub __nullable)
Odnosi się do trzeciego parametru (blokowego).
Dokumentacja nie obejmuje przykłady jak określić opcje dopuszczania wartości null parametrów bloku. Mówi dosłownie
Formularz nie podkreślonych można używać bezpośrednio po otwartym nawiasie, o ile typ jest prostym obiektem lub wskaźnikiem do bloku.
Próbowałem umieścić jedno z dwóch słów kluczowych dla bloku (w dowolnej pozycji) bez powodzenia. Wypróbowałem także warianty z przedrostkiem podkreślonym ( __nonnull
i __nullable
).
Dlatego moje pytanie brzmi: jak mogę określić semantyczną wartość zerową dla parametrów bloku?
NSError **
typem? Wydaje się, że nie mogę uszczęśliwić kompilatora.