一、KVC技巧
1.字符串转大写
一个字符串数组得到字符串全部大写之后的新数组。由valueForKey:
将uppercaseString
方法传给了NSArray的所有子元素,并且将处理结果添加到了返回的NSArray中
NSArray *array = @[@"hello",@"Objective-C",@"swift"];
NSArray *uppercaseArray = [array valueForKey:@"uppercaseString"];
NSLog(@"返回结果:%@", uppercaseArray);
/*
返回结果:(
HELLO,
"OBJECTIVE-C",
SWIFT
*/
由valueForKeyPath
处理方式:
先对array中的每个元素调用uppercaseString方法,然后再调用length方法,最后封装成NSNumber对象并添加到lengthArray中返回。
NSArray *array = @[@"hello",@"Objective-C",@"swift"];
NSArray *lengthArray = [array valueForKeyPath:@"uppercaseString.length"];
NSLog(@"返回结果:%@", lengthArray);
/*
返回结果:(
5,
11,
5
)
*/
2.性能更高效的简单集合操作符
-
@count
: 返回一个值为集合中对象总数的NSNumbe
r对象。 -
@sum
: 首先把集合中的每个对象都转换为double
类型,然后计算其总,最后返回一个值为这个总和的NSNumber
对象。 -
@avg
: 把集合中的每个对象都转换为double
类型,返回一个值为平均值的NSNumber
对象。 -
@max
: 使用compare:
方法来确定最大值。所以为了让其正常工作,集合中所有的对象都必须支持和另一个对象的比较。 -
@min
: 和@max
一样,但是返回的是集合中的最小值。
NSArray *array1 = @[@"dsf",@"f7",@"fsfd"];
NSInteger totalLength = [[array1 valueForKeyPath:@"@sum.length"] intValue]; // 9
NSInteger avgLength = [[array1 valueForKeyPath:@"@avg.length"] intValue]; // 3
NSArray *array = @[@2,@8,@1,@10,@9,@2];
NSInteger count = [[array valueForKeyPath:@"@count"] integerValue]; // 6
NSInteger sum = [[array valueForKeyPath:@"@sum.self"] integerValue]; // 32
float avg = [[array valueForKeyPath:@"@avg.self"] floatValue]; // 5.33333349
float max = [[array valueForKeyPath:@"@max.self"] floatValue]; // 10
float min = [[array valueForKeyPath:@"@min.self"] floatValue]; // 1
3.对象操作符去重与合并
@unionOfObjects
:会对数组合并
@distinctUnionOfObjects
: 会对数组去重
NSArray *a = @[@8, @3, @2, @6];
NSArray *b = @[@6, @4, @3];
NSLog(@"%@",[@[a, b] valueForKeyPath:@"@distinctUnionOfArrays.self"]);
/*
[
6,
2,
3,
8,
4
]
*/
NSLog(@"%@",[@[a, b] valueForKeyPath:@"@unionOfArrays.self"]);
/*
[
8,
3,
2,
6,
6,
4,
3
]
*/