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的判断时,切记将对象类型转换成值类型,否则会得到相反的结果.

上一篇下一篇

猜你喜欢

热点阅读