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

まず、==演算子を使用して (タイプの) 2 つのオブジェクト ポインターを比較していますNSString *。したがって、文字列の内容が同じ場合ではなく、ポインターが同じ場合に true を返します。2 つの文字列が同じかどうかを比較したい場合は、isEqualToString:or isEqual:(isEqual:はすべてのタイプのオブジェクトで機能するため、より一般的です) を使用する必要があります。

次に、それらが同じ場合は( ) をcompare:返し、最初の値が 2 番目より大きい場合は( ) を返します。したがって、実際には、それらが異なる場合にのみ1 を返します(具体的には、最初の値が 2 番目の値より大きい場合)。0NSOrderSame1NSOrderedDescending

于 2009-05-19T07:18:49.040 に答える
12
[returnedString isEqualToString: @"thisString"]
于 2009-05-19T07:11:10.067 に答える
5
if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");
于 2009-06-17T18:14:11.870 に答える
5

2 つの同一の文字列を比較すると、0 がcompare返されます。また、-1、および, 1 が返されることもあります。 NSOrderedSameNSOrderedAscendingNSOrderedDescending

isEqualToStringYES または NO を返す whichを使用することをお勧めします。

于 2009-05-19T07:11:41.047 に答える
2

== 演算子をオブジェクトに適用すると、ポインターが等しいかどうかがチェックされます。

-compareメソッドまたはそのコンパニオンのいずれかを使用する必要がありますcompare:options:--compare:options:range:または( 、、)を-compare:options:range:locale:返すNSComparisonResultNSOrderAscendingNSOrderSameNSOrderDescending

等価比較だけが必要な場合-isEqualToString:は、値を返す whichを使用できBOOLます。

于 2009-05-19T07:25:31.463 に答える