我有一个方法来构建一个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对象的描述。
所以我认为没办法做到这一点。
答案 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,那就是一个对象。您可以轻松区分拥有对象或具有零值。 (在之前尝试提取对象值时执行此操作。)