NSNumber BOOL Int转换问题

废话少说,直接上代码

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,828评论 0 9
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,337评论 30 472
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,866评论 6 13
  • iOS编程规范0规范 0.1前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可 测试、高效...
    iOS行者阅读 9,923评论 21 35
  • 偶然看到别人晒的晚餐,忽然嘴馋,缠着妈妈陪我玩,决定就你了~鸡卷鸡卷!! 里面的料还比较好准备,鸡胸肉裹粉炸起,还...
    蜜汁玉米阅读 2,732评论 0 0