Nil从预期返回非空值的方法返回

我正在实现UIKeyInputUITextInputTraitsUITextInput ,我需要实现:

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

但是,在分析我的项目时,我得到:“从一个预期返回一个非空值的方法返回的nil”。

什么才是正确的方法来摆脱这一点? 我应该做一个中止吗?

不要返回nil 。 如果没有UITextSelectionRects返回,则返回一个空数组。

实际上,如果您查看头源代码,该方法会NS_ASSUME_NONNULL_BEGIN标记。 所以简而言之, selectionRectsForRange成为一个非空的返回方法。

 // // UITextInput.h // UIKit // // Copyright (c) 2009-2017 Apple Inc. All rights reserved. // #import <CoreGraphics/CoreGraphics.h> #import <UIKit/UITextInputTraits.h> #import <UIKit/UIResponder.h> ... NS_ASSUME_NONNULL_BEGIN // <--- HERE! .. - (CGRect)firstRectForRange:(UITextRange *)range; - (CGRect)caretRectForPosition:(UITextPosition *)position; - (NSArray *)selectionRectsForRange:(UITextRange *)range NS_AVAILABLE_IOS(6_0); 

所以你不能返回null或零。 而是像这样返回一个空数组:

 - (NSArray *)selectionRectsForRange:(UITextRange *)range { return @[]; }