Розглянемо наступний метод
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
За допомогою нових ключових слівnonnull
та nullable
приміток ми можемо збагатити його наступним чином:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
але ми також отримуємо це попередження:
Вказівник відсутній в специфікаторі типу зведеності на нуль (__nonnull або __nullable)
Він відноситься до третього параметра (блок один).
Документація не поширюється з прикладами , як вказати допустимість порожніх параметрів блоку. У ньому йдеться дослівно
Ви можете використовувати форми, що не підкреслюються, зведені до нуля та не мають значення відразу після відкритої дужки, якщо тип є простим об’єктом чи покажчиком блоку.
Я намагався без жодної удачі поставити одне з двох ключових слів для блоку (у будь-яку позицію). Також випробували варіанти підкреслення ( __nonnull
і __nullable
).
Тому моє запитання: як я можу вказати семантичну нульовість для параметрів блоку?
NSError **
типом? Я не можу зробити компілятора щасливим.