判断条件中使用array.count的坑

268 阅读1分钟

在判断条件中使用数组的count属性获取数量会有个坑,先看代码:

    NSArray *array = @[@"", @""];
    NSInteger left = -1;
    NSInteger per = 30;
    NSInteger count = array.count;
    if (left < per * count) {
        NSLog(@"YES");
    } else {
        NSLog(@"NO");
    }
    // console: YES

    
    if (left < per * array.count) {
        NSLog(@"YES");
    } else {
        NSLog(@"NO");
    }

    // console: NO
  • 第一个if的判断结果是正确的。
  • 第二个if的判断结果是错误的。

目前原因暂未查到,如有大佬知道烦请告知
平时在开发时如要做条件判断,其中涉及到运算时,尽量先将两个比较条件赋值局部变量进行比较。
推荐写法:

    NSArray *array = @[@"", @""];
    NSInteger left = -1;
    NSInteger per = 30;
    NSInteger sum = per * array.count;
    if (left < sum) {
        NSLog(@"YES");
    } else {
        NSLog(@"NO");
    }