是否有一个简单的方法来检查NSRange传递给NSString上的substringWithRange是否存在(所以不会导致错误)?

Dou*_*ith 6 cocoa-touch nested objective-c ios nsrange

假设我在NSString"foo"上传递NSRange(位置:5,长度:50),该范围显然不存在.

有没有办法说[string rangeExists:NSRange],或者我们是否必须手动验证输入?

rma*_*ddy 18

你必须自己编写支票,但这很简单:

NSString *str = ... // some string
NSRange range = ... // some range to be used on str

if (range.location != NSNotFound && range.location + range.length <= str.length) {
    // It's safe to use range on str
}
Run Code Online (Sandbox Code Playgroud)

您可以创建一个类别方法NSString,添加您提出的rangeExists:方法.它只会是:

- (BOOL)rangeExists:(NSRange)range {
    return range.location != NSNotFound && range.location + range.length <= self.length;
}
Run Code Online (Sandbox Code Playgroud)