Обрабатывать _Nonnull или Nullable с многоуровневым типом указателя

Как связать обнуляемые ключевые слова с многоуровневыми типами указателей в следующем объявлении для (NSError **)error?

- (void)loadSessionForUserId:(nonnull NSString *)userId error:(NSError **)error { ... }

Я хочу сделать ошибку обнуляемой и избавиться от “Pointer is missing a nullability type specifier (__nonnull or __nullable)”

введите описание изображения здесь

2 ответа

Если вы получаете предупреждение или ошибку, если для проекта включена обработка-предупреждение-как-ошибка, в Xcode 9. Используйте этот формат для многоуровневых указателей:

Решение:

error:(NSError *_Nullable* _Nullable)error

Другие варианты ошибок:

а) с error:(NSError ** _Nonnull)errorПриводит к ошибке времени компиляцииNullability keyword 'nullable' cannot be applied to multi-level pointer type 'NSError *__autoreleasing *’

б) с error:(NSError * _Nonnull *)error Приводит к ошибке времени компиляции Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

в) с error:(NSError ** _Nullable)errorПриводит к ошибке времени компиляции Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

Open Radar для NSError** без типа обнуляемости отображается как предупреждение, которое не может быть подавлено http://www.openradar.me/21766176

Если вы хотите добавить явную обнуляемость, вам нужно применить _Nullable к внешнему (последнему) указателю. Но это значение по умолчанию для косвенных указателей, поэтому оно не должно быть необходимым. Ваш текущий код является правильным и предпочтительным.

- (void)loadSessionForUserId:(nonnull NSString *)userId error:(NSError ** _Nullable)error;
Другие вопросы по тегам