18

我试过了:

- (NSString*) generateString
{
    NSString* stringToReturn = @"thisString";
    return stringToReturn;
}

- (void) otherMethod
{
    NSString *returnedString = [self generateString];
    if (returnedString == @"thisString")
    { // Do this }
    else if (returnedString == @"thatString")
    { // Do that }
}

哪个永远不匹配。

然后我尝试过

if ([returnedString compare:@"thisString"] == 1)

但是 compare 方法总是为我返回 1,即使与不同的字符串进行比较也是如此。

这样做的正确方法是什么,我应该期待什么结果?

4

5 回答 5

45

首先,您使用==运算符来比较两个对象指针(类型为NSString *)。因此,当指针相同时返回 true,而不是字符串具有相同内容时。如果你想比较两个字符串是否相同,你应该使用isEqualToString:or isEqual:(isEqual:更通用,因为它适用于所有类型的对象)。

其次,当它们相同时compare:返回0( ),当第一个大于第二个时返回( )。所以实际上它只有在它们不同时才返回 1(特别是当第一个大于第二个时)。NSOrderSame1NSOrderedDescending

于 2009-05-19T07:18:49.040 回答
12
[returnedString isEqualToString: @"thisString"]
于 2009-05-19T07:11:10.067 回答
5

比较两个相同的字符串compare时会返回NSOrderedSame, 即 0。也可以返回NSOrderedAscending, -1, 和NSOrderedDescending, 1。

您可能更喜欢使用isEqualToStringwhich 返回 YES 或 NO。

于 2009-05-19T07:11:41.047 回答
5
if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");
于 2009-06-17T18:14:11.870 回答
2

== 运算符应用于对象时检查指针是否相等。

您必须使用-compare方法或其同伴之一 - compare:options:-compare:options:range:-compare:options:range:locale:返回NSComparisonResult( NSOrderAscending, NSOrderSame, NSOrderDescending)

如果你只需要相等比较,你可以使用-isEqualToString:which 返回一个BOOL值。

于 2009-05-19T07:25:31.463 回答