获取可空布尔值的Objective-C方法是什么?

17

我应该如何在Objective-C中获取一个布尔值,以便可以将true、false和nil分配给它?在Objective-C中这样做的方式是什么?类似于C#的Nullable。

我希望能够使用nil值来表示未定义。

2个回答

32

一个NSNumber实例可能会有帮助。例如:

NSNumber *yesNoOrNil;

yesNoOrNil = [NSNumber numberWithBool:YES]; // set to YES
yesNoOrNil = [NSNumber numberWithBool:NO];  // set to NO
yesNoOrNil = nil; // not set to YES or NO

为了确定它的值:

if (yesNoOrNil == nil)
{
    NSLog (@"Value is missing!");
}
else if ([yesNoOrNil boolValue] == YES)
{
    NSLog (@"Value is YES");
}
else if ([yesNoOrNil boolValue] == NO)
{
    NSLog (@"Value is NO");
}

在 Mac OS X 10.3 及之后的所有平台以及所有 iPhone OS 平台上,-[NSNumber boolValue] 方法保证返回 YES 或 NO。


虽然这是最接近本地实现的方法,但我讨厌以这种方式做。如果开发人员忘记属性是 NSNumber* 并假设它是 BOOL,那么就会导致难以发现的错误,此时他们测试 if (yesNoOrNil) 会给出不正确的结果而没有任何警告。 - Carlos P

1

我认为你需要使用一些类来实现这个功能,例如将布尔值封装到NSNumber对象中。


+1 当然你不一定需要使用类,但这是最好的方法。 - walkytalky
那么,就像这样...你怎么做呢? - Alex Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接