2009-05-19 30 views
17

Tôi đã thử:Strings So sánh trong Cocoa

- (NSString*) generateString 
{ 
    NSString* stringToReturn = @"thisString"; 
    return stringToReturn; 
} 

- (void) otherMethod 
{ 
    NSString *returnedString = [self generateString]; 
    if (returnedString == @"thisString") 
    { // Do this } 
    else if (returnedString == @"thatString") 
    { // Do that } 
} 

Mà không bao giờ phù hợp.

Tôi đã cố gắng sau đó

if ([returnedString compare:@"thisString"] == 1) 

Nhưng so sánh phương pháp luôn luôn trả về 1 đối với tôi, ngay cả khi so sánh với một chuỗi khác nhau.

Cách chính xác để thực hiện việc này là gì và tôi nên mong đợi kết quả gì?

Trả lời

45

Trước hết, bạn đang sử dụng toán tử == để so sánh hai con trỏ đối tượng (thuộc loại NSString *). Vì vậy, điều đó trả về true khi các con trỏ giống nhau, không phải khi các chuỗi có cùng nội dung. Nếu bạn muốn so sánh xem hai chuỗi có giống nhau không, bạn nên sử dụng isEqualToString: hoặc isEqual: (isEqual: là tổng quát hơn vì nó hoạt động với tất cả các loại đối tượng).

Thứ hai, compare: lợi nhuận 0 (NSOrderSame) khi họ đều giống nhau, và 1 (NSOrderedDescending) khi là người đầu tiên lớn hơn thứ hai. Vì vậy, trên thực tế nó trả về 1 chỉ khi chúng khác nhau (cụ thể, khi lần đầu tiên lớn hơn giây).

+4

Về mặt kỹ thuật nếu bạn so sánh NSStrings bạn nên sử dụng -isEqualToString: vì phương pháp đó được tối ưu hóa cho trường hợp đối số cũng là đối tượng NSString. –

12
[returnedString isEqualToString: @"thisString"] 
5

Khi so sánh hai chuỗi giống hệt compare sẽ trở lại NSOrderedSame, đó là 0. Nó cũng có thể trở lại NSOrderedAscending, -1, và NSOrderedDescending, 1.

Bạn có thể thích sử dụng isEqualToString mà trả YES hoặc NO .

2

Toán tử == khi áp dụng cho đối tượng kiểm tra xem con trỏ có bằng nhau hay không.

Bạn phải sử dụng -compare phương pháp hoặc một trong những bạn đồng hành của nó - compare:options:-compare:options:range: hoặc -compare:options:range:locale: mà trả về một NSComparisonResult (NSOrderAscending, NSOrderSame, NSOrderDescending)

Nếu bạn chỉ cần so sánh bình đẳng, bạn có thể sử dụng -isEqualToString: mà trả về một Giá trị BOOL.

5
if ([returnedString isEqualToString:@"thisString"]) 
    NSLog(@"Equal"); 
else 
    NSLog(@"Not Equal");