2009-05-24 3 views
102

Vâng, đối với số nguyên tôi sẽ sử dụng NSNumber. Nhưng YES và NO không phải là đồ vật, tôi đoán vậy. A.f.a.i.k. Tôi chỉ có thể thêm các đối tượng vào một số NSDictionary, đúng không?Làm cách nào để thêm giá trị boolean vào NSDictionary?

Tôi không thể tìm thấy bất kỳ lớp trình bao bọc nào cho các boolean. Có cái gì không?

Trả lời

149

Bạn sử dụng NSNumber.

Đô thị này có phương thức ... và số ... sử dụng các boolean, giống như số nguyên và vân vân.

Từ NSNumber class reference:

// Creates and returns an NSNumber object containing a 
// given value, treating it as a BOOL. 
+ (NSNumber *)numberWithBool:(BOOL)value 

và:

// Returns an NSNumber object initialized to contain a 
// given value, treated as a BOOL. 
- (id)initWithBool:(BOOL)value 

và:

// Returns the receiver’s value as a BOOL. 
- (BOOL)boolValue 
+0

Tuyệt vời! Tôi đoán trong nội bộ nó lưu trữ các bool là 0/1? – Thanks

+5

@harms là chính xác. Ví dụ: 'NSDictionary * dictionary = [Từ điển NSDictionaryWithObjectsAndKeys: [Số NSNumberWithBool: YES], @" someKey ", nil];' –

+24

Điều đáng nói là, bây giờ có một cú pháp chữ cho NSNumbers. '@ YES' giống với' [Số NSNumberWithBool: YES] ' – jcampbell1

16

Nếu bạn đang khai báo nó như là một nghĩa đen và bạn đang sử dụng kêu vang v3.1 hoặc ở trên, bạn nên sử dụng @NO/@YES nếu bạn khai báo nó dưới dạng chữ. Ví dụ.

NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy]; 
foo[@"bar"] = @YES; 

Để biết thêm về rằng:

http://clang.llvm.org/docs/ObjectiveCLiterals.html

+1

Nhận lỗi trình biên dịch: Các kiểu con trỏ không tương thích khởi tạo NSMutableDictionary * với biểu thức kiểu NSDictionary.Nếu bạn thay đổi khai báo thành NSDictionary thay vào đó, nhận lỗi trình biên dịch: Phương thức dự kiến ​​viết phần tử từ điển không tìm thấy trên đối tượng kiểu NSDictionary * – Tony

+1

Chữ sẽ chỉ tạo một 'NSDictionary', không phải là' NSMutableDictionary'. Vì vậy, việc gán '@ YES' thành' foo [@ "bar"] 'là không thể vì' @ {@ "key": @NO} 'không thể thay đổi được. – redhotvengeance

+0

Yup, xin lỗi vì lỗi đánh máy đó, tôi đã cập nhật nó. – sabalaba

39

Cú pháp mới kể từ Apple LLVM Compiler 4.0

dictionary[@"key1"] = @(boolValue); 
dictionary[@"key2"] = @YES; 

Cú pháp chuyển đổi BOOL-NSNumber, đó là chấp nhận được để NSDictionary.

+1

Đây phải là câu trả lời được chấp nhận. –

+0

Vẫn hoạt động, thực sự cảm ơn người đàn ông! –

2

Như jcampbell1 chỉ ra, bây giờ bạn có thể sử dụng cú pháp theo nghĩa đen cho NSNumbers:

NSDictionary *data = @{ 
         // when you always pass same value 
         @"someKey" : @YES 
         // if you want to pass some boolean variable 
         @"anotherKey" : @(someVariable) 
         }; 
-2

Hãy thử điều này:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 
[dic setObject:[NSNumber numberWithBool:TRUE] forKey:@"Pratik"]; 
[dic setObject:[NSNumber numberWithBool:FALSE] forKey:@"Sachin"]; 

if ([dic[@"Pratik"] boolValue]) 
{ 
    NSLog(@"Boolean is TRUE for 'Pratik'"); 
} 
else 
{ 
    NSLog(@"Boolean is FALSE for 'Pratik'"); 
} 

if ([dic[@"Sachin"] boolValue]) 
{ 
    NSLog(@"Boolean is TRUE for 'Sachin'"); 
} 
else 
{ 
    NSLog(@"Boolean is FALSE for 'Sachin'"); 
} 

Kết quả sẽ như sau:

Boolean là TRUE cho 'Pratik '

Boolean là FALSE cho' Sachin '

+1

Bạn cũng có thể thực hiện '[Số NSNumberWithBool: NO]' và '[Số NSNumberWithBool: YES]'. –