文档章节

KVC键值编码

 蒲公英6_6守候
发布于 2015/11/08 13:56
字数 663
阅读 3
收藏 0

KVC  
全称为:Key Value coding 键值编码

setValue: forKey:修改值。
valueForKey:传入属性的名字。
setValue:forKeyPath:通过键路径来修改。
valueForKeyPath:传入属性的路径就是xx.xx的形式。
KVC的优点是为安全机制完善,通过Key去查找Value的形式有助于在后期开发的设计模式上有很大的帮助。
四种编码的格式。意思就是通过键来取值
看一个实际例子;
//练习二:当猎人走进森林的时候,发现了三头野猪,野猪体重分别是100,200,300 . 但是猎人只想猎取200斤的野猪,于是他开始打猎,打猎过后发现是100斤的野猪,他继续打猎一直打到200斤的野猪,他会说一句:终于可以回家了!请用KVC的写法去实现

//练习三:如果森林也作为一个类,应该怎么实现?

main.m
#import <Foundation/Foundation.h>
#import "Person.h" 
#import "Pig.h" 
#import "Forest.h" 
int main(int argc, const char * argv[]) {
//实例化
Person *person = [[Person alloc]init];
Pig *pig = [[Pig alloc]init];
Pig *pigI = [[Pig alloc]init];
Pig *pigII = [[Pig alloc]init];

//属性设置
   [person setValue:"猎人" forKey:"name"];
   [pig setValue:"100" forKey:"weight"];
   [pigI setValue:"200" forKey:"weight"];
   [pigII setValue:"300" forKey:"weight"];
//创建森林集合,把猪放到森林里
   Forest *forestI = [[Forest alloc]init];
     NSArray *array  = @[pig , pigI , pigII];
[forestI setValue:array forKey:"array"];
   //给猎人一个目标
   [person setValue:
"200" forKey:"target"];
   //取出打猎的目标
   int target = [[person valueForKey:
"target"] intValue];
//第一次固定打到100斤猪
   for (int i = 0 ; i < [array count]; i++) {
//需要转换成野猪的类型
       Pig *pigTmp = array[i];
       //比较是否为100斤,或者转换为String ,或者int
       int weightTmp = [[pigTmp valueForKey:@"weight"]intValue];
if (weightTmp  100) {
           NSLog("不是你想要的目标!");
       }
       //往后继续打猎,直到打到200斤的为止
       if(weightTmp  target){
           NSLog(
"任务完成了");
           break;
       }else{
           NSLog("没打到就继续打!这次野猪体重为:%",[pigTmp valueForKey:@"weight"]);
       }
}

Person.h

#import <Foundation/Foundation.h>
#import "Pig.h" 
@interface Person : NSObject
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)Pig *hunterBoar;
@property(nonatomic,assign)int target;
@end

Pig.h

#import <Foundation/Foundation.h>

@interface Pig : NSObject
@property(nonatomic,assign)int weight;
@end

Forest.h

#import <Foundation/Foundation.h>
@interface Forest : NSObject
@property(nonatomic,strong)NSArray *array;
@end

往后还有一些扩展知识!
avg:平均值
NSLog(
“猪平均体重%斤",[forestI valueForKeyPath:"array.@avg.weight"]);

count:总数
NSLog(
“猪有%个",[forestI valueForKeyPath:"array.@count"]);

max:最大
NSLog(
"最有质量猪是%斤",[forestI valueForKeyPath:"array.@max.weight"]);

min:最小
NSLog(
"都是瘦肉的猪%斤",[forestI valueForKeyPath:"array.@min.weight"]);

sum:总数
NSLog(
“猪总和%斤",[forestI valueForKeyPath:"array.@sum.weight"]);

针对数组的情况
@distinctUnionOfObjects:返回指定属性去重后的值的数组
@unionOfObjects:返回指定属性的值的数组,不去重
属性的值不能为空,否则产生异常。

NSArray *array2 = [@3,@2,@1,@2];
   NSArray *array3 = [array2 valueForKeyPath:
"unionOfObjects.self"];
   NSLog(
"—————————————%@——————————————",array3);
NSArray *array4 = [array2 valueForKeyPath:"@distinctUnionOfObjects.self"];
   NSLog(
"%@",array4);


© 著作权归作者所有

上一篇: KVO
下一篇: ARC MRC 混编
粉丝 0
博文 15
码字总数 7681
作品 0
西安
私信 提问
iOS基础黑科技:KVO(键值观察)以及KVC(键值编码)

一、前言: 许多大神的博客都有关于KVO以及KVC的分析,在这里我整理一下自己关于KVO以及KVC的理解。求大神们轻喷~~ 二、基本概念: 1、键值编码(KVC):顾名思义,键值编码是一种访问对象属...

MichaelLee_
2017/12/19
0
0
OC中类的扩展

类的属性写在 .h 文件里面可以被继承的子类使用 类的属性写在 .m 大括号内,只能被本类使用 读取项目文件中的文件 - (void)viewDidLoad { [super viewDidLoad]; //读取项目文件中的文件 //创...

Dumplings
2016/03/31
51
0
KVC和KVO的演示

// // CZViewController.m // 09-KVC&KVO // // Created by apple on 11/07/14. // Copyright (c) 2014年itcast. All rights reserved. // #import"CZViewController.h" #import"CZPerson.h"......

Dolion-Hou
2016/03/08
18
0
iOS中第三方有序字典框架——M13OrderedDictionary

iOS中第三方有序字典框架——M13OrderedDictionary 一、引言 M13OrderedDictionary是拥有字典和数组功能的第三方集合序列,开发者可以通过索引和键值来实现对其中元素的访问。其实现了NSArr...

珲少
2016/07/01
835
0
私有变量访问及赋值

首先来看看KVC的其他用处及简介 一、 KVC介绍 kvc就是键值编码(key-value),说白了就是通过指定的key获得想要的值value。而不是通过调用Setter、Getter方法访问。* 二、 KVC的强大之处 1 ...

刀客445
2016/05/19
36
0

没有更多内容

加载失败,请刷新页面

加载更多

JS 打印控制

JS 打印控制 var PrintStartString = "<!--打印开始标示符-->";//设置打印开始区域var PrintEndString = "<!--打印结束标示符-->";//设置打印结束区域var HtmlText = window.do......

DrChenXX
23分钟前
5
0
LevelDB:使用介绍

LevelDB 提供的接口其实很简单,下面举例进行简单说明。 安装 git clone https://github.com/google/leveldb cd leveldb mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. ......

slagga
29分钟前
5
0
《JavaScript正则表达式迷你书》读书笔记

正则基础 常见简写形式 字符组 具体含义 记忆方式 \d 表示 [0-9]。表示是一位数字。 其英文是 digit(数字) \D 表示 [^0-9]。表示除数字外的任意字符。 \w 表示 [0-9a-zA-Z_]。表示数字、大小...

muzi131313
34分钟前
4
0
Git的反悔操作

概述 这次主要来讲讲Git的反悔操作,自己平时在写代码的过程中经常会出现想要弃用所有的改动或回滚到上一次commit的情况。Git上的反悔操作有reset、rebase、revert等,每个操作各有区别和对应...

duduYZ
34分钟前
3
0
实现双向绑定Proxy比defineproperty优劣如何?

前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向...

寻找海蓝
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部