web-dev-qa-db-ja.com

ココアの文字列の比較

私が試してみました:

- (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を返します。

これを行う正しい方法は何ですか?また、どのような結果を期待する必要がありますか?

18
mattdwen

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

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

45
newacct
[returnedString isEqualToString: @"thisString"]
12
ibz
if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");
5
chaimp

2つの同一の文字列を比較すると、compareNSOrderedSameを返します。これは0です。また、NSOrderedAscending、-1、およびNSOrderedDescending、1を返すこともできます。

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

5
Gordon Wilson

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

-compareメソッドまたはそのコンパニオンの1つ-compare:options: -compare:options:range:または-compare:options:range:locale:を使用する必要があります。これらはNSComparisonResultNSOrderAscendingNSOrderSameNSOrderDescending

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

2
mouviciel