Обработка плохо аннотированных методов Objective-C?
Прошло некоторое время с тех пор, как я работал с Objective-C (и я новичок в Swift), так что терпите меня. Тем не менее, я заметил несколько "аннотаций обнуляемости", которые либо вообще не имеют смысла, либо полностью противоречат документации Apple. Возьмите следующее NSURL
метод класса, например:
+ (instancetype)URLByResolvingBookmarkData:(NSData *)bookmarkData
options:(NSURLBookmarkResolutionOptions)options
relativeToURL:(NSURL *)relativeURL
bookmarkDataIsStale:(BOOL *)isStale
error:(NSError * _Nullable *)error;
Вы заметите, что к error
параметр, так что следует предположить, что этот метод был аннотирован, верно?
Если это так, то можно также предположить, что, так как relativeToURL
Параметр не имеет добавленной аннотации обнуляемости, он не обнуляем.
На самом ли деле я понимаю новые аннотации Nullability Objective-C?
Если да, то почему документация для relativeURL
конкретно укажите (жирное форматирование мое):
Чтобы разрешить закладку в области приложения, используйте значение nil.
Я понимаю причину новых аннотаций, но они настолько пострадали от существующих классов, что я не совсем понимаю их пользу. Я что-то пропустил?
1 ответ
Если это говорит _Nonnull, это не может быть ноль. Если он говорит _Nullable, он может. В противном случае, по крайней мере по умолчанию, вы не можете делать какие-либо предположения в любом случае, IIRC.