Являются ли результаты функции Objective C ненулевыми по умолчанию?

В этой теме о реализации UITextInput Метод делегата, автор говорит, что когда они запускают статический анализ своего кода, они получают ошибку в этой функции:

- (NSArray *)selectionRectsForRange:(UITextRange *)range
{
    return nil;
}

Ошибка "nil возвращается из метода, который должен возвращать ненулевое значение".

Объявление функции не имеет спецификатора обнуляемости результата. Являются ли результаты функции ненулевыми по умолчанию? (Я работаю в основном в Свифте в эти дни и не являюсь экспертом по последним изменениям в Objective-C.)

1 ответ

Решение

Они не.

Заголовок, в котором объявлен этот метод, заключен в скобки с макросами "предположить, не ноль":

//
//  UITextInput.h
//  UIKit
//
//  Copyright (c) 2009-2017 Apple Inc. All rights reserved.
//

#import <CoreGraphics/CoreGraphics.h>

#import <UIKit/UITextInputTraits.h>
#import <UIKit/UIResponder.h>

//===================================================================================================
// Responders that implement the UIKeyInput protocol will be driven by the system-provided keyboard,
// which will be made available whenever a conforming responder becomes first responder.

NS_ASSUME_NONNULL_BEGIN

// snip
// ...
// L150
/* Geometry used to provide, for example, a correction rect. */
- (CGRect)firstRectForRange:(UITextRange *)range;
- (CGRect)caretRectForPosition:(UITextPosition *)position;
- (NSArray *)selectionRectsForRange:(UITextRange *)range NS_AVAILABLE_IOS(6_0);       // Returns an array of UITextSelectionRects

Таким образом, этот метод фактически был помечен как имеющий ненулевое возвращаемое значение.

Другие вопросы по тегам