布尔语中的虚假与虚假不同?

时间:2012-01-12 20:35:53

标签: objective-c pointers boolean null

我有一个方法来构建一个post请求。该请求可能有x个参数,但它们都不是必需的。有一些boolean类型的参数(它们作为字符串传递,值为“true”或“false”(不是我的决定,它是一个API)。

这是问题所在。我的方法声明包含作为post请求的一部分接受的所有参数。问题是如果布尔参数为true,为false或者不存在,请求将返回不同的结果。

我的方法ID类似

-(void) createRequestWithID:(NSString *)id translate(NSNumber *)translate onlyLastVersions:(NSNumber *)onlyLastVersions

我的方法是一个框架的一部分,将由其他开发人员使用和调用。这意味着,我无法控制它们传递给参数的内容,例如translate是一个布尔值(我使用NSNumber作为包装器)。

这就是问题所在。我需要能够识别该方法是否被称为pasing翻译为true,false或nil。因为对于这些情况,我会将请求作为translate =“true”,translate =“false”或请求中不存在翻译。

我需要一种方法来区分true,false和nil。

测试gbd试图找到一种方法来区分它我得到:

(gdb)p translateFALSE $ 5 =(NSNumber *)0x0

(gdb)p translateNIL $ 6 =(NSNumber *)0x0

(gdb)po translateFALSE 无法打印NIL对象的描述。

(gdb)po translateNIL 无法打印NIL对象的描述。

(gdb)po [translateFALSE class] 无法打印NIL对象的描述。

(gdb)po [translateNIL class] 无法打印NIL对象的描述。

所以我认为没办法做到这一点。

3 个答案:

答案 0 :(得分:3)

if( translate ) {
  if( [translate boolValue] ) {
    // translate is present and is set (YES)
  } else {
    // translate is present and is not set (NO)
  }
} else {
  // translate is nil / not present
}

如果您希望将此外观更像是一个三向分支:

if( [translate boolValue] ) {
  // translate is present and is set (YES)
} else if( translate ) {
  // translate is present and is not set (NO)
} else {
  // translate is nil / not present
}

答案 1 :(得分:1)

布尔值没有NULL(或nil) - NULL是指针值。 NSNumber可以为nil,但代表BOOL NO的NSNumber不会为nil。

答案 2 :(得分:1)

如果你传递的是NSNumber,那就是一个对象。您可以轻松区分拥有对象或具有零值。 (在之前尝试提取对象值时执行此操作。)