我正在构建此代码以反转字符串,而我所需要的只是NSRange的参数不起作用的原因。
CODE:
for (int i = 0; i <= oldString.length; i++) {
NSRange range = NSMakeRange(i, oldString.length);
}
答案 0 :(得分:0)
首先,你的代码是不够的,如果它有效,也什么都不做。
此外,您的应用崩溃是因为NSRange
有2个参数:location
和length
。
因此,在location
为0之前,length
可以是oldString.length
(即所有字符串),否则,location
为&gt; 0并设置为oldString.length
长度,超出范围。
在我正确使用NSMakeRange
的地方使用此功能:
- (NSString *)reverseString:(NSString *)string {
NSMutableString *newString = [NSMutableString new];
for (int i = (int)[string length]-1; i >= 0; i--) {
[newString appendString:[string substringWithRange:NSMakeRange(i, 1)]];
}
return [newString copy];
}
答案 1 :(得分:0)
您的代码是:
for (int i = 0; i <= oldString.length; i++) {
NSRange range = NSMakeRange(i, oldString.length);
}
首先,正如Matteo告诉你的那样,它没有任何效果。它所做的只是在不使用它们的情况下制作一堆范围。
但是让我们来看看这些范围吧!只需考虑range
的连续值。研究你自己的代码。假设我们的字符串oldString
是12345
。然后它的长度为5.然后范围将连续覆盖这些字符串:
12345
2345[and one too far]
345[and two too far]
45[and three too far]
5[and four too far]
那些非常愚蠢的范围!