iOS:KVC的实践用法

KVC,即是指 [NSKeyValueCoding],一个非正式的 Protocol,提供一种机制来间接访问对象的属性。注意这里的间接一词,后面会讲道为什么是间接。
一个对象拥有某些属性。比如说,一个 Person 对象有一个 name 和一个 age 属性。以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 age 的 key。 key 只是一个字符串,它对应的值可以是任意类型的对象。从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个是获取 key 的值。
直接上代码,可以复制过去运行一下看看:

- (UITextField *)textField {
    if (!_textField) {
        _textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 200, 30)];
        _textField.placeholder = @"这是一个Demo";
        [self.view addSubview:self.textField];
    }
    return _textField;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    /**
     利用KVC调用隐藏的方法来做一些事情
    **/
    //利用KVC来修改placeholder的字体颜色
    [self.textField setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
    //利用KVC来调用隐藏的方法来做count,max,min,sum
    NSMutableArray *array = [NSMutableArray new];
    PersonModel *person = [PersonModel new];
    person.age = 30;
    PersonModel *person1 = [PersonModel new];
    person1.age = 20;
    PersonModel *person2 = [PersonModel new];
    person2.age = 50;
    [array addObject:person];
    [array addObject:person1];
    [array addObject:person2];
    NSLog(@"%@",[array valueForKey:@"@count"]);
    NSLog(@"%@",[array valueForKeyPath:@"@max.age"]);
    NSLog(@"%@",[array valueForKeyPath:@"@min.age"]);
    NSLog(@"%@",[array valueForKeyPath:@"@sum.age"]);
}

运行结果如下:


image.png

何为间接?就是有些方法是隐藏的,没有暴露出来,通过KVC可以间接的去调用他们来完成一些事情,不需要自己去实现,比如这些基本的方法经常会用到。

你可能感兴趣的:(iOS:KVC的实践用法)