我试过了:
- (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,即使与不同的字符串进行比较也是如此。
这样做的正确方法是什么,我应该得到什么结果?
答案 0 :(得分:45)
首先,您使用==
运算符来比较两个对象指针(类型NSString *
)。因此,当指针相同时返回true,而不是在字符串具有相同内容时返回true。如果您想比较两个字符串是否相同,则应使用isEqualToString:
或isEqual:
(isEqual:
更通用,因为它适用于所有类型的对象。)
其次,compare:
会在0
(NSOrderSame
)相同时返回1
(NSOrderedDescending
),当第一个大于第二个时。所以实际上只有当它们不同时才会返回1 (特别是当第一个大于第二个时)。
答案 1 :(得分:12)
[returnedString isEqualToString: @"thisString"]
答案 2 :(得分:5)
比较两个相同的字符串compare
将返回NSOrderedSame
,即0。它还可以返回NSOrderedAscending
, - 1和NSOrderedDescending
,1。
您可能更喜欢使用返回YES或NO。的<{3}}
答案 3 :(得分:5)
if ([returnedString isEqualToString:@"thisString"])
NSLog(@"Equal");
else
NSLog(@"Not Equal");
答案 4 :(得分:2)
当应用于对象时,==运算符检查指针是否相等。
您必须使用-compare
方法或其中一个同伴 - compare:options:
- compare:options:range:
或-compare:options:range:locale:
返回NSComparisonResult
(NSOrderAscending
,NSOrderSame
,NSOrderDescending
)
如果您只需要进行相等比较,则可以使用-isEqualToString:
返回BOOL
值。