【发布时间】:2010-04-07 20:57:40
【问题描述】:
我有一个返回 NSRange 的方法。当我从类外部调用此方法时,出现编译错误。
NSRange tmpRange;
tmpRange = [phrase rangeInString:searchString forString:theLetter goingForward:YES];
return tmpRange.location == -1;
在 .h 文件中:
#import <Foundation/Foundation.h>
@interface Phrase : NSObject {
}
- (NSRange) rangeInString:(NSString *) tgt forString:(NSString *) find goingForward:(BOOL) fwd;
@end
此方法在 Phrase 对象中由其他方法调用,没有问题。编译器说“分配中的类型不兼容”。
谁能给我解释一下?我认为它与返回在对象外部生成的 NSRange/struct 类型值有关,但我不知道为什么它在一个地方而不是另一个地方工作。
【问题讨论】:
-
请注意,对于无效的
NSRange,通常应该使用NSNotFound作为location字段值。 -
嗯——由于各种低质量的原因,我实际上将位置值用作一种错误代码:-1 就是这样一个代码。所有代码都小于零。这实际上与错误没有任何关系,因为编译器不知道在运行时将返回什么。但这就是为什么我不使用 NSNotFound...
-
位置变量被定义为一个 NSUInteger,所以它永远不会小于零。你应该使用 NSNotFound。
-
但这与为什么在编译时应该为简单地转储方法结果的赋值抛出错误完全无关:一种在定义它的类中工作正常的方法。它可以'不知道返回的值是什么。
标签: iphone objective-c cocoa cocoa-touch macos