我有一个返回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


短语对象中的其他方法可以毫无问题地调用此方法。编译器说“分配中的类型不兼容”。

有人可以向我解释吗?我认为这与返回在对象外部生成的NSRange / struct类型值有关,但我不知道为什么它在一个地方而不是另一个地方起作用。

最佳答案

当然,方法可以返回NSRange。但是返回的结构需要特别注意编译器,因为调用方法的方式通常是不同的(objc_msgSend_stretobjc_msgSend)。

请确保将phrase声明为

Phrase* phrase = ...;


以便编译器知道-rangeInString:…返回NSRange,而不是

id phrase = ...;


(此外,由于不显示编译器错误,所以请确保使用return … == -1;的函数返回的是BOOL而不是NSRange。)

关于iphone - 方法可以返回NSRange吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2595868/

10-11 11:02