Câu trả lời:
Bạn sử dụng NSNumber.
Nó có các phương thức init ... và number ... sử dụng boolean, giống như các số nguyên, v.v.
// 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
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
@YES
cũng giống như[NSNumber numberWithBool:YES]
Nếu bạn đang khai báo nó dưới dạng một ký tự và bạn đang sử dụng clang v3.1 trở lên, bạn nên sử dụng @NO / @YES nếu bạn đang khai báo nó dưới dạng một ký tự. Ví dụ
NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy];
foo[@"bar"] = @YES;
Để biết thêm thông tin về điều đó:
NSDictionary
, không phải một NSMutableDictionary
. Vì vậy, không thể gán @YES
cho foo[@"bar"]
vì @{ @"key": @NO }
không thể thay đổi.
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)
};
Thử cái 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'");
}
Đầu ra sẽ như sau:
Boolean là TRUE cho ' Pratik '
Boolean là FALSE cho ' Sachin '
[NSNumber numberWithBool:NO]
và [NSNumber numberWithBool:YES]
.