美文网首页iOS学习专题iOS 开发 iOS Developer
用KVC获取数组最值/平均值/获取批量返回值等

用KVC获取数组最值/平均值/获取批量返回值等

作者: chensifang | 来源:发表于2016-09-17 19:05 被阅读0次

    开发中获取数组中最大/最小值会先进行排序再取值.
    获取数组的平均值会求和取平均,略显麻烦.
    其实iOS中可以利用KVC实现, 还可以批量调用方法,批量获取返回值.

    NSArray *array = [NSArray arrayWithObjects:@"1.2",@"2.1", @"4.9", nil];
    
    // 最大值
    CGFloat maxFloat = [[array valueForKeyPath:@"@max.floatValue"] floatValue];
    
    // 最小值
    CGFloat minFloat = [[array valueForKeyPath:@"@min.floatValue"] floatValue];
    
    // 平均值
    CGFloat avg = [[array valueForKeyPath:@"@avg.floatValue"] floatValue];
    
    // 转为int类型后再转为string类型
    NSArray *resultArray = [array valueForKeyPath:@"intValue.stringValue"];
    
    // 转为int类型后再转为string类型再求每个string的长度
    NSArray *lengthArray = [array valueForKeyPath:@"intValue.stringValue.length"];
    
    NSArray *stringArray = [NSArray arrayWithObjects:@"NameS",@"CHEN", @"WoShiShui", nil];
    
    // string数组转大写
    NSArray *resultArray = [stringArray valueForKeyPath:@"uppercaseString"];
    
    

    可以看出, KVC可以做到让元素依次调用某方法并将返回值放入新的数组返回. 系统的方法可以如此调用,猜想自定义方法也可行, 验证如下:

    // 在 NSNumber 分类中扩展一个判断正负的方法
    @implementation NSNumber (Extension)
    - (BOOL)isPositiveNumber {
        if ([self floatValue] > 0) return YES;
        else return NO;
    }
    
    // 用 NSNumber 数组检验
    NSArray *numArray = [NSArray arrayWithObjects:@1.2, @(-2.1), @(10), nil];
    NSArray *reuslts = [numArray valueForKeyPath:@"isPositiveNumber"];
    for (int i = 0; i < reuslts.count; i++) {
        NSLog(@"第%d个元素类型: %@, 值: %@", i + 1, [reuslts[i] class],reuslts[i]);
    }
    
    打印结果:
    2016-09-17 20:41:40.204 Test [2957:502894] 第1个元素类型: __NSCFBoolean, 值: 1
    2016-09-17 20:41:40.204 Test [2957:502894] 第2个元素类型: __NSCFBoolean, 值: 0
    2016-09-17 20:41:40.205 Test [2957:502894] 第3个元素类型: __NSCFBoolean, 值: 1
    

    返回值是BOOL类型, 结果正、负、正, 验证正确.
    这个特性值得利用到程序的设计中去,想想都觉得能玩出很多"花样"来.


    觉得有用的猿友们点个赞喽😂.

    相关文章

      网友评论

        本文标题:用KVC获取数组最值/平均值/获取批量返回值等

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