Herhangi biri beni Amaç C'deki büyük / küçük harfe duyarlı olmayan karşılaştırmayla ilgili herhangi bir kaynağa yönlendirebilir mi? Eşdeğer bir yöntemi yok gibi görünüyorstr1.equalsIgnoreCase(str2)
Herhangi biri beni Amaç C'deki büyük / küçük harfe duyarlı olmayan karşılaştırmayla ilgili herhangi bir kaynağa yönlendirebilir mi? Eşdeğer bir yöntemi yok gibi görünüyorstr1.equalsIgnoreCase(str2)
Yanıtlar:
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
Belgeler Arama ve Karşılaştırma Yöntemleri'nde bulunmaktadır
NSString
bir boole döndüren bir kategori içinde bir yöntem olarak uygulamaktır . Sonra alıcı dize, nil
bir bütün olarak yöntem döndürür NO
.
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
Not: stringA &&
çünkü ne zaman gereklidir stringA
ise nil
:
stringA = nil;
[stringA caseInsensitiveCompare:stringB] // return 0
ve böyle olur NSOrderedSame
da olarak tanımlanır 0
.
Aşağıdaki örnek tipik bir tuzaktır:
NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
// what happens if "Rank" is not found in standardUserDefaults
}
Sadece büyük / küçük harf duyarsızlığından daha fazla kontrol istiyorsanız alternatif:
[someString compare:otherString options:NSCaseInsensitiveSearch];
Sayısal arama ve aksan duyarlılığı iki kullanışlı seçenektir.
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
Karşılaştırma işleminden önce her zaman aynı durumda olduklarından emin olabilirsiniz:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
En büyük yararı, sıfır dizelerini karşılaştırma konusunda matm tarafından açıklanan potansiyel sorundan kaçınmanızdır. compare:options:
Yöntemlerden birini yapmadan önce dizenin sıfır olmadığını kontrol edebilir veya tembel olabilirsiniz (benim gibi) ve her karşılaştırma için yeni bir dize oluşturma ek maliyetini göz ardı edebilirsiniz (yalnızca bir tane yapıyorsanız minimumdur) veya iki karşılaştırma).
caseInsensitiveCompare
) her zaman bunu kullanın.
Bunu yapmanın yeni bir yolu. iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
true
"Café" ve "É" için geri dönüyorsa, bu kesinlikle doğru bir cevap DEĞİLDİR .
Jason Coco'nun Swift'e verdiği cevabı son derece tembel hale getirmek :)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
MacOS'ta -[NSString isCaseInsensitiveLike:]
, BOOL
tıpkı şu şekilde dönen basitçe kullanabilirsiniz -isEqual:
.
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success
NSMutableArray *arrSearchData;
NSArray *data=[arrNearByData objectAtIndex:i];
NSString *strValue=[NSString stringWithFormat:@"%@", [data valueForKey:@"restName"]];
NSRange r = [strValue rangeOfString:key options:NSCaseInsensitiveSearch];
if(r.location != NSNotFound)
{
[arrSearchData addObject:data];
}
@"Some String"
herhangi bir başka çağrıdan alınan ve olur edilirnil
, sizinif
verecektrue
gönderme gibicaseInsensitiveCompare
hiçnil
geçerlidir ve başka sonuçnil
bizim durumumuzda, ile karşılaştırıldığında, hangiNSOrderedSame
dönecektirtrue
(NSOrderedSame
0 olarak tanımlanır). Benim durumumda olduğu gibi bu oldukça yıkıcı hataların kaynağı olabilir. Şerefe!