zoukankan      html  css  js  c++  java
  • KVC笔记

    利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)

    示例代码:

     示例一:

            Person *p = [[Person alloc] init];

            p.dog = [[Dog alloc] init];

            

            // 输出结果都一样

            p.dog.name = @"wangcai";

            [p.dog setValue:@"laifu" forKey:@"name"];

            [p.dog setValue:@"haha" forKey:@"name"];

            [p.dog setValue:@"laifu" forKeyPath:@"name"];

            [p.dog setValue:@"haha" forKeyPath:@"name"];

            

            // 区别

            // forKeyPath包含了forKey的功能, 以后使用forKeyPath

            // forKeyPath中可以利用.运算符, 一层一层往下查找对象的属性

    //        [p setValue:@"laifu" forKey:@"dog.name"];   // 错误:没有dog.name的key

            [p setValue:@"haha" forKeyPath:@"dog.name"];

            

            NSLog(@"%@", p.dog.name);

     

    示例二:

            Person *p = [[Person alloc] init];

            p.dog = [[Dog alloc] init];

            p.dog.bone = [[Bone alloc] init];

            p.dog.bone.type = @"骨头";

            

            [p setValue:@"肉" forKeyPath:@"dog.bone.type"];

            [p.dog setValue:@"肉" forKeyPath:@"bone.type"];

            [p.dog.bone setValue:@"肉" forKeyPath:@"type"];

     

    示例三: 用于获取值

            Book *b1 = [[Book alloc] init];

            b1.name = @"iOS";

            b1.price = 10.5;

            

            NSLog(@"%@", [b1 valueForKeyPath:@"name"]);

    示例四:其他用法

            Person *p = [[Person alloc] init];

            

            Book *b1 = [[Book alloc] init];

            b1.name = @"iOS";

            b1.price = 10.5;

            

            Book *b2 = [[Book alloc] init];

            b2.name = @"Android";

            b2.price = 15.5;

            

            Book *b3 = [[Book alloc] init];

            b3.name = @"PHP";

            b3.price = 12.5;

            

            Book *b4 = [[Book alloc] init];

            b4.name = @"前端";

            b4.price = 8;

            

            p.books = @[b1, b2, b3, b4];

            

            // 取出books数组中每一个元素的name属性值, 放到一个新的数组中返回

            NSArray *names = [p valueForKeyPath:@"books.name"];

            

            NSLog(@"%@", names);

            // 利用KVC求和

            double sum = [[p valueForKeyPath:@"books.@sum.price"] doubleValue];

            // 利用KVC求平均

            double average = [[p valueForKeyPath:@"books.@avg.price"] doubleValue];

  • 相关阅读:
    [Eclipse]GEF入门系列(四、其他功能)
    [Eclipse]GEF入门系列(三、应用实例)
    [Eclipse]GEF入门系列(一、Draw2D)
    打开Win2000的自动补齐功能
    让URLConnection使用代理服务器
    [Eclipse]GEF入门系列(序)
    给表格的单元格增加编辑功能(In place edit)
    设置Eclipse RCP程序的外观和首选项
    利用winrar自动备份重要资料(续,经验技巧)
    终于换了新电脑
  • 原文地址:https://www.cnblogs.com/sjxjjx/p/4937436.html
Copyright © 2011-2022 走看看