美文网首页
NSNumber BOOL Int转换问题

NSNumber BOOL Int转换问题

作者: liuning_leo | 来源:发表于2016-07-13 16:08 被阅读2033次

    废话少说,直接上代码

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

    相关文章

      网友评论

          本文标题:NSNumber BOOL Int转换问题

          本文链接:https://www.haomeiwen.com/subject/alasjttx.html