Objective-C语法糖

作者: 小哥_xiaoge | 来源:发表于2018-04-18 14:19 被阅读99次

一、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: 返回一个值为集合中对象总数的NSNumber对象。
  • @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
]
*/

相关文章

网友评论

    本文标题:Objective-C语法糖

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