Perbandingan string di Objective-C

93

Saat ini saya menyiapkan server web yang saya komunikasikan melalui SOAP dengan aplikasi iPhone saya. Saya mengembalikan string yang berisi GUID dan ketika saya mencoba membandingkan ini dengan string lain, saya mendapatkan beberapa hasil yang aneh.

Mengapa ini tidak menyala? Tentunya kedua senar itu cocok?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;
ingh.am
sumber
1
Pertanyaan ini sekarang sebagian besar tidak berguna karena tangkapan layar telah hilang. Inilah sebabnya mengapa kode harus disalin ke pertanyaan.
jscs
Tangkapan layar adalah kesalahan yang saya kira, tetapi jawabannya diberikan seperti 2 tahun yang lalu!
ingh.am
1
Tetapi tidak ada pembaca selanjutnya yang dapat melihat kesalahan atau kode yang Anda gunakan untuk mengetahui apakah itu sama dengan milik mereka, yang berarti pertanyaan ini tidak dapat membantu orang lain.
jscs
Saya akan mencari gambarnya. Saya mengerti bahwa ini seperti basis referensi untuk pertanyaan lain tetapi menutupnya sekarang hanya sedikit tidak berguna.
ingh.am
2
Mengapa pertanyaan ini ditutup? Ini pertanyaan yang sangat valid!
ibz

Jawaban:

217

Gunakan -isEqualToString:metode ini untuk membandingkan nilai dua string. Menggunakan ==operator C hanya akan membandingkan alamat objek.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}
jlehr
sumber
2
AH! Berterima kasih banyak. Merasa seperti orang bodoh yang satu ini!
ingh. Pagi
3
Dugaan saya adalah bahwa di ObjectiveC ++ Anda dapat membuat operator yang kelebihan beban untuk memberi Anda kemampuan sintaksis-manis untuk menggunakan == tetapi tidak ada programmer C obyektif yang waras akan melakukan ini, karena == hanya digunakan untuk pemeriksaan identitas di objek C obyektif.
Warren P
48

Anda dapat menggunakan perbandingan case-sensitive atau case-sensitive, tergantung apa yang Anda butuhkan. Peka huruf besar-kecil seperti ini:

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

Peka huruf besar / kecil seperti ini:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}
mxg
sumber
1
Saya pikir seharusnya: ([perbandingan kategori: @ "Beberapa String" options: NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL
9
Hati-hati dengan fungsi "bandingkan" karena jika string (dalam hal ini "kategori") adalah nihil, bandingkan akan selalu mengembalikan NSOrderedSame.
nh32rg
Itu poin yang bagus @ nh32rg !! 1 untuk itu! Apakah isEqualToString memiliki masalah yang sama?
badweasel
4

Anda dapat membandingkan string dengan fungsi di bawah ini.

NSString *first = @"abc";
NSString *second = @"abc";
NSString *third = [[NSString alloc] initWithString:@"abc"];
NSLog(@"%d", (second == third))  
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :-
    0
    1
    1
    1
Vikram Pote
sumber