美文网首页
iOS的KVC妙用举例

iOS的KVC妙用举例

作者: 流年划过颜夕 | 来源:发表于2019-04-22 10:59 被阅读0次

    KVC在iOS开发中是绝不可少的利器,这种基于运行时的编程方式极大地提高了灵活性,简化了代码,KVC算是iOS开发的一种黑魔法。

    使用场景举例:
    如果想要将以下的所有merchantType字段存成一个不可变的数组,以备用

    {
        "code": "000000",
        "data": {
            "businessInfos": [{
                "distance": "561.32",
                "businessId": "BD2017102109081500069783",
                "businessName": "丽马体验店",
                "businessAreaName": "市辖区",
                "merchantType": "CF99",
            }, {
                "distance": "1553.78",
                "businessId": "BD2017070611050100012749",
                "businessName": "麦克咖啡",
                "businessAreaName": "秀洲区",
                "merchantType": "BK",
            }, {
                "distance": "1593.86",
                "businessId": "BD2017070611022200012748",
                "businessName": "大麦客直销中心",
                "businessAreaName": "秀洲区",
                "merchantType": "WD",
                "businessImage": "http://fdfs.xylbn.cn/group1/M00/05/38/wKgthloFRsaAB9oKAAAZ_LoHwQM515.png"
            }, {
                "distance": "1596.76",
                "businessId": "BD2017082315125500057012",
                "businessName": "阿拉丁麻辣烫",
                "businessAreaName": "市辖区",
                "merchantType": "CF1",
                "businessImage": "http://fdfs.xylbn.cn/group1/M00/02/44/wKgthVlUrIeAZ60_AAC-VaUFHrc830.png"
            }, {
                "distance": "1596.99",
                "businessId": "BD2017082315264300057032",
                "businessName": "玛丽莲甜品(嘉兴万达店)",
                "businessAreaName": "市辖区",
                "merchantType": "CF3",
            }, {
                "distance": "1597.01",
                "businessId": "BD2017082314390700056966",
                "businessName": "小淮娘",
                "businessAreaName": "桐乡市",
                "merchantType": "CF4",
            }]
        },
        "msg": "执行成功"
    }
    

    常规的方法:

        self.shopArray=[[[self dictionaryWithContentsOfJSONString:@"shop.json"] objectForKey:@"data"] objectForKey:@"businessInfos"];
    
        NSMutableArray * merchantTypeArrMutableArr = [NSMutableArray array];
        for(NSDictionary *dict in self.shopArray){
            NSString * str = dict[@"merchantType"];
            [merchantTypeArrMutableArr addObject:str];
        }
        NSArray * merchantTypeArr = [NSArray arrayWithArray: merchantTypeArrMutableArr];
    
        NSLog(@"%@ merchantTypeArr", merchantTypeArr);
    

    巧妙的方法:

        self.shopArray=[[[self dictionaryWithContentsOfJSONString:@"shop.json"] objectForKey:@"data"] objectForKey:@"businessInfos"];
    
        NSArray * merchantTypeArr = [self.shopArray valueForKey:@"merchantType"];
    
        NSLog(@"%@ merchantTypeArr", merchantTypeArr);
    

    如果还想获取每个merchantType字段的一些属性,比如字符长度,然后生成数组,同样可以一行代码搞定:

        NSArray* merchantTypeLengthArr = [merchantTypeArr valueForKeyPath:@"length"];
        NSLog(@"%@ merchantTypeLengthArr", merchantTypeLengthArr);
    

    再复杂点的场景也能极简处理,比如再求出所有merchantType字段字符的总长度

            NSNumber* merchantTypeAllLength= [merchantTypeLengthArr valueForKeyPath:@"@sum.self"];
            NSLog(@"%@ merchantTypeAllLength", merchantTypeAllLength);
    

    相关文章

      网友评论

          本文标题:iOS的KVC妙用举例

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