【发布时间】:2009-05-24 14:41:21
【问题描述】:
好吧,对于整数,我会使用NSNumber。但 YES 和 NO 不是对象,我猜。 AFAIK。我只能将对象添加到NSDictionary,对吗?
我找不到任何布尔值的包装类。有吗?
【问题讨论】:
-
以防万一,A.f.a.i.k.据我所知
标签: objective-c iphone cocoa-touch uikit
好吧,对于整数,我会使用NSNumber。但 YES 和 NO 不是对象,我猜。 AFAIK。我只能将对象添加到NSDictionary,对吗?
我找不到任何布尔值的包装类。有吗?
【问题讨论】:
标签: objective-c iphone cocoa-touch uikit
你使用 NSNumber。
它有 init... 和 number... 接受布尔值的方法,就像它接受整数等一样。
// Creates and returns an NSNumber object containing a
// given value, treating it as a BOOL.
+ (NSNumber *)numberWithBool:(BOOL)value
和:
// Returns an NSNumber object initialized to contain a
// given value, treated as a BOOL.
- (id)initWithBool:(BOOL)value
和:
// Returns the receiver’s value as a BOOL.
- (BOOL)boolValue
【讨论】:
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
@YES 与 [NSNumber numberWithBool:YES] 相同
Apple LLVM Compiler 4.0之后的新语法
dictionary[@"key1"] = @(boolValue);
dictionary[@"key2"] = @YES;
语法将BOOL 转换为NSNumber,NSDictionary 可以接受。
【讨论】:
如果您将其声明为文字并且您使用的是 clang v3.1 或更高版本,则如果您将其声明为文字,则应使用 @NO / @YES。例如
NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy];
foo[@"bar"] = @YES;
更多信息:
【讨论】:
NSDictionary,而不是NSMutableDictionary。所以将@YES 分配给foo[@"bar"] 是不可能的,因为@{ @"key": @NO } 是不可变的。
正如jcampbell1 所指出的,现在您可以对 NSNumbers 使用文字语法:
NSDictionary *data = @{
// when you always pass same value
@"someKey" : @YES
// if you want to pass some boolean variable
@"anotherKey" : @(someVariable)
};
【讨论】:
试试这个:
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'");
}
输出如下:
对于 'Pratik',布尔值是 TRUE
对于 'Sachin',布尔值是 FALSE
【讨论】:
[NSNumber numberWithBool:NO]和[NSNumber numberWithBool:YES]。