NSNumber BOOL Int转换问题
2016-07-13 本文已影响2033人
liuning_leo
废话少说,直接上代码
subscribeNext:^(NSNumber *x) {
self.loginBtn.enabled = YES;
** BOOL sucess = x;**
if (sucess) {
LELWelcomViewController *vc = [[LELWelcomViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
}else{
NSLog(@"signIn result is %@", x);
}
在上面的代码中,
NSNumber *x 被传递过来的时候是 0,但是当它赋值给BOOL success 时, success 的值变为 1 了,这与预想转换成 0 的结果刚好相悖.
这里就产生问题啦 ,为什么x 在赋值给 success 时会被转换成1呢?
经过一番思考后得出答案,BOOL值进行转换时,其基准是判断对象是否存在,如果对象存在的时候,即为1,不存在,则为0; 而 NSNumber 恰好就是一个对象,所以即使它为0的情况下,在编译器的眼里依然视为对象存在,被转换过成1.
因此在这里要想将0转换成 NO, 必须先将 NSNumber 类型的 IntegerValue取出来,然后赋给 success.
改造后,如下
subscribeNext:^(NSNumber *x) {
self.loginBtn.enabled = YES;
** BOOL sucess = x.integerValue;**
if (sucess) {
LELWelcomViewController *vc = [[LELWelcomViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
}else{
NSLog(@"signIn result is %@", x);
}
因此,以后进行条件是0和1的判断时,切记将对象类型转换成值类型,否则会得到相反的结果.