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閱讀 1,762評論 0 9
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,205評論 30 471
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,123評論 6 13
  • iOS編程規范0規范 0.1前言 為??高產品代碼質量,指導廣大軟件開發人員編寫出簡潔、可維護、可靠、可 測試、高效...
    iOS行者閱讀 4,496評論 21 35
  • 偶然看到別人曬的晚餐,忽然嘴饞,纏著媽媽陪我玩,決定就你了~雞卷雞卷!! 里面的料還比較好準備,雞胸肉裹粉炸起,還...
    蜜汁玉米閱讀 346評論 0 0