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];
KVC笔记的更多相关文章
- iOS 开发笔记-Objective-C之KVC、KVO
概述 键值编码(KVC).键值监听(KVO)特性 键值监听KVO Key Value Observing(简称KVO)其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属 ...
- Effective Objective-C 读书笔记
一本不错的书,给出了52条建议来优化程序的性能,对初学者有不错的指导作用,但是对高级阶段的程序员可能帮助不是很大.这里贴出部分笔记: 第2条: 使用#improt导入头文件会把头文件的内容全部暴露到目 ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory
23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory 2016-07-18 13:03:43 模式理解
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- Objective-C(十七、KVC键值编码及实例说明)——iOS开发基础
结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,仅仅是作为參考,以苹果官方文档为准~ 十七.键值编码 K ...
- CoordinatorLayout使用笔记
CoordinatorLayout的使用笔记 首先第一个子控件是AppBarLayout存放首部控件,里面放了一个CollapsingToolbarLayout.代码如下: <android.s ...
- 8 Explicit Animations 指明的动画 笔记
8 Explicit Animations 指明的动画 笔记 If you want something done right, do it yourself. 如果你想让事情做好,那就自动来 ...
- ios开发runtime学习五:KVC以及KVO,利用runtime实现字典转模型
一:KVC和KVO的学习 #import "StatusItem.h" /* 1:总结:KVC赋值:1:setValuesForKeysWithDictionary实现原理:遍历字 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
随机推荐
- JS中数组Array的用法
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了. var arr = new Array(); // 初始化数组arr[0] = "aaa";arr[1] = ...
- ztree
http://www.s u c h s o.com/projecteactual/ztree-jiaocheng-mvc-checkbox-quanxuan-demo-down.html http: ...
- 天嵌E8卡片电脑USBWIFI驱动linux移植
下载驱动:http://pan.baidu.com/s/1sjL0Axn The drivers can be downloaded from Ralink website, the present ...
- JAVA设计模式之桥梁模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...
- JS-改变页面的颜色(二)
需求:点击页面的按钮,改变页面的颜色 思路:一先画出最简单的页面,二想办法获取页面的body节点,三想办法修改body节点的背景颜色属性,四通过一个方法获取随机的颜色值 和第一个例 ...
- NDK 的开发流程
1.NDK开发所需要的工具 windows 需要在windows下的环境 把c代码打包成 手机能用的函数库 首先模拟手机的环境 1 NDK .sh linux 批处理文件 .bat windows 头 ...
- ORACLE SQL前端补0的三种方式。
前端补0的三种方式. select lpad(sal,8,'0') from emp;select to_char(sal,'00000000') from emp;select substr('00 ...
- PIC32MZ tutorial -- Watchdog Timer
Watchdog is a very necessary module for embedded system. Someone said that embedded system operates ...
- c++子类调用基类方法的一个例子
Base.h #pragma once class Base { public: Base(void); ~Base(void); bool CreatClone( ...
- python异常处理、反射、socket
一.isinstance 判断对象是否为类的实例 n1 = print isinstance(n1,int) class A: pass class B(A): pass b= B() print i ...