私が試してみました:
- (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を返します。
これを行う正しい方法は何ですか?また、どのような結果を期待する必要がありますか?
まず、==
演算子を使用して、2つのオブジェクトポインター(タイプNSString *
)を比較します。したがって、文字列の内容が同じである場合ではなく、ポインタが同じである場合にtrueが返されます。 2つの文字列が同じであるかどうかを比較する場合は、isEqualToString:
またはisEqual:
を使用する必要があります(isEqual:
は、すべてのタイプのオブジェクトで機能するため、より一般的です)。
次に、compare:
は同じ場合は0
(NSOrderSame
)を返し、最初の値が2番目の値より大きい場合は1
(NSOrderedDescending
)を返します。したがって、実際には、それらが異なる場合(具体的には、最初の値が2番目の値より大きい場合)に1 のみを返します。
[returnedString isEqualToString: @"thisString"]
if ([returnedString isEqualToString:@"thisString"])
NSLog(@"Equal");
else
NSLog(@"Not Equal");
2つの同一の文字列を比較すると、compare
はNSOrderedSame
を返します。これは0です。また、NSOrderedAscending
、-1、およびNSOrderedDescending
、1を返すこともできます。
YESまたはNOを返す isEqualToString
を使用することをお勧めします。
==演算子をオブジェクトに適用すると、ポインターが等しいかどうかがチェックされます。
-compare
メソッドまたはそのコンパニオンの1つ-compare:options:
-compare:options:range:
または-compare:options:range:locale:
を使用する必要があります。これらはNSComparisonResult
(NSOrderAscending
、 NSOrderSame
、NSOrderDescending
)
同等性の比較だけが必要な場合は、BOOL
値を返す-isEqualToString:
を使用できます。