誰かがObjective Cの大文字と小文字を区別しない比較に関するリソースを教えてもらえますか? str1.equalsIgnoreCase(str2)
と同等のメソッドがないようです
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
ドキュメントは 検索および比較方法 にあります
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
注:stringA &&
が必要な理由は、stringA
がnil
の場合:
stringA = nil;
[stringA caseInsensitiveCompare:stringB] // return 0
したがって、NSOrderedSame
も0
として定義されます。
次の例は、典型的な落とし穴です。
NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
// what happens if "Rank" is not found in standardUserDefaults
}
大文字と小文字を区別しないだけでなく、より多くの制御が必要な場合の代替策は次のとおりです。
[someString compare:otherString options:NSCaseInsensitiveSearch];
数値検索と発音区別の区別は、2つの便利なオプションです。
比較する前に、常に同じケースであることを確認できます。
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
主な利点は、nil文字列の比較に関してmatmで説明されている潜在的な問題を回避できることです。 compare:options:
メソッドのいずれかを実行する前に文字列がnilでないことを確認するか、(私のように)怠zyで各比較の新しい文字列を作成する追加コストを無視することができます(実行している場合は最小限です) 1つまたは2つの比較)。
これを行う新しい方法。 iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
この方法を試してください
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
Jason Cocoの答えをSwiftに変換して、非常に怠け者に:)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
iPhoneのContactAppのようにプレフィックスで確認する
([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)
this ブログは私にとって有用でした
Swiftの代替ソリューション:
両方のUpperCaseを作成するには:
例えば:
if ("ABcd".uppercased() == "abcD".uppercased()){
}
またはLowerCase:の両方を作成するには
例えば:
if ("ABcd".lowercased() == "abcD".lowercased()){
}
MacOSでは、単に-[NSString isCaseInsensitiveLike:]
を使用できます。これは-isEqual:
と同様にBOOL
を返します。
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success