比较Cocoa中的字符串

mat*_*wen 18 cocoa compare objective-c nsstring

我试过了:

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

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

哪个从不匹配.

我试过了

if ([returnedString compare:@"thisString"] == 1)
Run Code Online (Sandbox Code Playgroud)

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

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

new*_*cct 45

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

其次,compare:返回0(NSOrderSame)当它们是相同的,和1(NSOrderedDescending当所述第一比第二更大).所以事实上只有当它们不同时才会返回1 (特别是当第一个大于第二个时).

  • 从技术上讲,如果您要比较NSStrings,则应使用-isEqualToString:因为该方法针对参数也是NSString对象的情况进行了优化. (4认同)

ibz*_*ibz 12

[returnedString isEqualToString: @"thisString"]
Run Code Online (Sandbox Code Playgroud)


Gor*_*son 5

当比较两个相同的字符串时compare将返回NSOrderedSame,它也是0.它还可以返回NSOrderedAscending-1,和NSOrderedDescending1.

您可能更喜欢使用isEqualToString哪个返回YES或NO.


cha*_*imp 5

if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");
Run Code Online (Sandbox Code Playgroud)