Kontrol örneği NSArray içeriyorsa NSString
Dizeleri bir grup ile bir dizi var ve eğer belirli bir dize dizisi içinde yer alan olup olmadığını kontrol etmek istiyorum. containsObject
kullanırsam: dizi mesaj, doğru sonuçlar alıyorum. Aynı dize aynı nesneye işaret NSString
tüm nesneler? Ya da neden containsObject
: çalışıyor mu?
NSArray *stringArray = [NSArray arrayWithObjects:@"1",@"2",@"3",anotherStringValue, nil];
if([stringArray containsObject:@"2"]){
//DO SOMETHING
}
CEVAP
Evet, kodlu sabit NSStrings (dize hazır) (@"..."
kaynak kod) işlemi çalışırken, sonsuza kadar var olan dizeleri dönüştü.
AncakNSArray'containsObject:
s yöntemleri nesneleri isEqual:
, dolayısıyla çağırırhatta bir dinamik olarak oluşturulan dize[NSString stringWithFormat:@"%d", 2]
gibiYES
dönecektiörnek bir göz atın.
Bu isEqual:
(daha doğrusu isEqualToString:
) yöntem NSString için uygulanan olmasıdırfarkında (karşılaştırma işaretçi kimlikler vs) içeriğive böylece döner dizeleri yaratıldıkları nasıl olursa olsun karakter aynı sıra (karşılaştırma) içeren herhangi bir çift için YES
.
Eşit (işaretçi)kimlik kontrol dizi sıralamak lazım ve ile karşılaştırın
NSString *yourString = @"foo";
BOOL identicalStringFound = NO;
for (NSString *someString in stringArray) {
if (someString == yourString) {
identicalStringFound = YES;
break;
}
}
büyük olasılıkla, yine de istemem.
Ya da daha uygun bir moda
BOOL identicalStringFound = [stringArray indexOfObjectIdenticalTo:someString] != NSNotFound;
(büyük olasılıkla bu da) olmaz.
Özetle:
Olumlu bir cevap alma nedeni containsObject:
DEĞİLharflerden oluşan dizeler aynı sabit örneği paylaşır çünküAMAkongre tarafından containsObject:
çünkü aramalar içerik farkında olan isEqual:
,.
NSObject protocol isEqual:
(kısa) belgeleri okumak isteyebilirsiniz.
Nasıl bir dize Objective-C başka bir d...
Nasıl dize karakter ve boşluk içeriyor...
Nasıl eğer URL bir dize içeriyorsa kon...
Nasıl bir sözcüğü bir dize PHP kullana...
Eğer string bir dizi değeri içeriyorsa...