2010-05-04 29 views
6

Tôi có một NSArray đầy bools (được biểu thị bằng một số), và tôi cần kiểm tra xem có đối tượng nào trong mảng bằng 1. Làm thế nào tôi có thể làm điều đó?NSArray đầy với các đối tượng bool

+0

làm gì yo u có nghĩa là bởi đối tượng bool? –

+0

bài đăng được chỉnh sửa thành ans. question –

+0

Bạn đang cố gắng thêm int vào NSArray? vì không thể làm được. –

Trả lời

12

BOOL không phải là đối tượng. Giả sử bạn có nghĩa là một số đối tượng đại diện cho một boolean như NSNumber thực hiện một thích hợp isEqual:, bạn chỉ có thể làm một cái gì đó như [array containsObject:[NSNumber numberWithBool:YES]].

+0

wow. Tôi không biết nó có thể được sử dụng như thế. Cảm ơn!!! –

6

Như Chuck nói, hãy sử dụng -[NSArray containsObject:[NSNumber numberWithBool:YES]]. Là một thí nghiệm tưởng tượng, đây là một số cách khác để hoàn thành mục tiêu ...

Bạn có thể làm điều này bằng một NSPredicate hoặc sử dụng các khối API mới:

NSArray *myArr //decleared, initialized and filled 

BOOL anyTrue = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"boolValue == 1"]].count > 0; 

hoặc

BOOL anyTrue = [myArray indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
    if([obj boolValue]) { 
    *stop = YES; 
    } 
    return [obj boolValue]; 
}].count > 0; 

Bạn cũng có thể sử dụng mã hóa Khóa-giá trị, mặc dù tôi không chắc chắn về hiệu quả tương đối của nó:

[[myArray valueForKeyPath:@"@sum.boolValue"] integerValue] > 0; 
+3

Phiên bản KVC bool-summing đó vô cùng đáng sợ. – Chuck

+0

@Chuck, vâng, tôi sẽ chỉ là một chút e ngại khi phải đọc bất kỳ giải pháp nào trong mã thực. Tuy nhiên, ít tập luyện não lập trình chức năng thú vị. –

Các vấn đề liên quan