In this thread on implementing a UITextInput
delegate method, the poster says that when they run static analysis on their code, they get an error on this function:
- (NSArray *)selectionRectsForRange:(UITextRange *)range
{
return nil;
}
The error is "nil returned from a method that is expected to return a non-null value."
The function declaration does not have a nullability specifier on the result. Are function results non-null by default? (I work mostly in Swift these days, and am not expert on the latest changes to Objective-C.)
They are not.
The header where that method is declared is bracketed with the "assume nonnull" macros:
//
// 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
So this method has in fact been marked as having a non-null return value.