การเปรียบเทียบสตริงใน Objective-C


93

ขณะนี้ฉันได้ตั้งค่าเว็บเซิร์ฟเวอร์ซึ่งฉันสื่อสารผ่าน SOAP กับแอป iPhone ของฉัน ฉันส่งคืนสตริงที่มี GUID และเมื่อฉันพยายามเปรียบเทียบสิ่งนี้กับสตริงอื่นฉันได้ผลลัพธ์แปลก ๆ

ทำไมสิ่งนี้จะไม่ยิง? ทั้งสองสายตรงกันหรือไม่?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;

1
คำถามนี้ส่วนใหญ่ไม่มีประโยชน์เนื่องจากภาพหน้าจอหายไป นี่คือเหตุผลที่ควรคัดลอกโค้ดไปวางในคำถาม
jscs

ภาพหน้าจอเป็นข้อผิดพลาดที่ฉันคิด แต่คำตอบได้รับเมื่อ 2 ปีก่อน!
ingh.am

1
แต่ไม่มีผู้อ่านในอนาคตสามารถเห็นข้อผิดพลาดหรือรหัสที่คุณใช้เพื่อทราบว่ามันเหมือนกับของพวกเขาหรือไม่ซึ่งหมายความว่าคำถามนี้ไม่สามารถช่วยคนอื่นได้
jscs

ฉันจะมองหาภาพ ฉันเข้าใจว่านี่เป็นเหมือนฐานอ้างอิงสำหรับคำถามอื่น ๆ แต่การปิดตอนนี้เป็นเพียงเล็กน้อยที่ไม่มีจุดหมาย
ingh.am

2
ทำไมคำถามนี้จึงถูกปิด? เป็นคำถามที่ใช้ได้อย่างสมบูรณ์แบบ!
ibz

คำตอบ:


215

ใช้-isEqualToString:วิธีการเปรียบเทียบค่าของสองสตริง การใช้ตัว==ดำเนินการC จะเป็นการเปรียบเทียบที่อยู่ของวัตถุ

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}

2
อา! ขอบคุณมาก. รู้สึกเหมือนเป็นคนโง่ในเรื่องนี้!
ingh.am

3
ฉันเดาว่าใน ObjectiveC ++ คุณสามารถสร้างโอเปอเรเตอร์โอเวอร์โหลดเพื่อให้คุณมีความสามารถทางไวยากรณ์ในการใช้ == แต่ไม่มีโปรแกรมเมอร์ C ที่มีเหตุผลจะทำเช่นนี้ได้เนื่องจาก == ใช้สำหรับการตรวจสอบตัวตนในวัตถุ C วัตถุประสงค์เท่านั้น
Warren P

48

คุณสามารถใช้การเปรียบเทียบที่คำนึงถึงตัวพิมพ์เล็กและใหญ่หรือไม่ก็ได้ขึ้นอยู่กับสิ่งที่คุณต้องการ คำนึงถึงตัวพิมพ์เล็กและใหญ่เป็นดังนี้:

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

ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่เป็นดังนี้:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}

1
ฉันคิดว่ามันควรจะเป็น: ([category Compare: @ "Some String" options: NSCaseInsensitiveSearch] == NSOrelledSame)
JaakL

9
โปรดใช้ความระมัดระวังกับฟังก์ชัน "Compare" เพราะถ้าสตริง (ในกรณีนี้คือ "category") เป็นศูนย์การเปรียบเทียบจะส่งคืน NSOrperedSame เสมอ
nh32rg

นั่นเป็นจุดที่ยอดเยี่ยม @ nh32rg !! +1 เลย! isEqualToString มีปัญหาเดียวกันหรือไม่?
badweasel

4

คุณสามารถเปรียบเทียบสตริงกับฟังก์ชันด้านล่าง

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.