一个方法可以返回NSRange吗?

Dan*_*son 2 iphone macos cocoa cocoa-touch objective-c

我有一个返回NSRange的方法.当我从类外部调用此方法时,我收到编译错误.

NSRange tmpRange;
tmpRange = [phrase rangeInString:searchString forString:theLetter goingForward:YES];
return tmpRange.location == -1;
Run Code Online (Sandbox Code Playgroud)

在.h文件中:

#import <Foundation/Foundation.h>


@interface Phrase : NSObject {

}
- (NSRange) rangeInString:(NSString *) tgt forString:(NSString *) find goingForward:(BOOL) fwd;  

@end
Run Code Online (Sandbox Code Playgroud)

通过其他方法在Phrase对象中调用此方法没有问题.编译器说"赋值中的不兼容类型".

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

ken*_*ytm 5

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

请确保您声明phrase

Phrase* phrase = ...;
Run Code Online (Sandbox Code Playgroud)

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

id phrase = ...;
Run Code Online (Sandbox Code Playgroud)

(另外,由于您没有显示编译器错误的哪一行,请确保使用的函数return … == -1;返回BOOL而不是NSRange.)