iOS 開發(fā)小常識 白名單遍歷篩選展示數(shù)據(jù) 字符串判空

//** 白名單控制需求:頁面數(shù)據(jù)拿到后,跟隱藏白名單比較,如果在隱藏白名單中則不展示

    // 頁面數(shù)據(jù)(listMArray)
    NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
    // 隱藏白名單(hideWhiteArray)
    NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
    for (NSDictionary *dict in listMArray) {
        if ([hideWhiteArray containsObject:dict[@"name"]]) {
            [listMArray removeObject:dict];
        }
    }
    NSLog(@"篩選后的頁面數(shù)據(jù):%@", listMArray);
    // 這種方法會crash,這是因為for in遍歷的時候不能操作數(shù)據(jù)源,會報:<__NSArrayM: 0x28336f600> was mutated while being enumerated。
    // 如果把遍歷后的結果放到另外一個臨時數(shù)組中,遍歷結束后再從數(shù)據(jù)源中剔除臨時數(shù)組,這樣顯得有點麻煩。


    // 接下里看另外一種方法:for循環(huán)。
    NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
    NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
    for (int i = 0; i < listMArray.count; i++) {
        NSDictionary *dict = listMArray[i];
        if ([hideWhiteArray containsObject:dict[@"name"]]) {
            [listMArray removeObject:dict];
        }
    }
    NSLog(@"篩選后的頁面數(shù)據(jù):%@", listMArray);
    // 篩選后的數(shù)據(jù)是:@{@"name":@"zhangSan"}, @{@"name":@"wangWu"}

   // emmmmmmmmmmmmmmmmmmmmmmmm
  // 嗯,感覺邏輯沒有問題,但是結果,what??
  // 結果不對,臥槽,好好思考一下流程.........
  // 發(fā)現(xiàn)是由于數(shù)據(jù)源個數(shù)發(fā)生變化后,i角標發(fā)生跳位導致,解決方法就是在每次移除數(shù)據(jù)的時候把i減少一位即可:
    NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
    NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
    for (int i = 0; i < listMArray.count; i++) {
        NSDictionary *dict = listMArray[i];
        if ([hideWhiteArray containsObject:dict[@"name"]]) {
            [listMArray removeObject:dict];
            i -= 1;
        }
    }
    NSLog(@"篩選后的頁面數(shù)據(jù):%@", listMArray);
    // 篩選后的數(shù)據(jù)是:@{@"name":@"zhangSan"}}
    // 這樣就滿足了需求,perfect!


    // 清空字符串要使用第二種正確。
    NSString *str = @"";
    if (str) {
        NSLog(@"有值");
    } else {
        NSLog(@"空");
    }
    
    NSString *str = nil;
    if (str) {
        NSLog(@"有值");
    } else {
        NSLog(@"空");
    }

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容