美文网首页
IOS键值编码KVC

IOS键值编码KVC

作者: 张威_9cfe | 来源:发表于2020-04-07 00:13 被阅读0次

KVC机制允许以字符串形式间接操作对象的属性

FKItem.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface FKItem : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) int price;

@end

NS_ASSUME_NONNULL_END

FKItem.m

#import "FKItem.h"

@implementation FKItem
{
    NSDate *date;
}

//处理非法设置不存在的key,在类的实现部分重写setValue: forUndefinedKey:方法,避免闪退
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
    NSLog(@"你设置的key:[%@] 不存在!", key);
}

//处理非法访问不存在的key,在类的实现部分重写setValue: forUndefinedKey:方法,避免闪退
- (id)valueForUndefinedKey:(NSString *)key
{
    NSLog(@"你访问的key:[%@] 不存在!", key);
    return nil;
}

//给基本类型赋值为nil会报异常,在类的实现部分重写setNilValueForKey
- (void)setNilValueForKey:(NSString *)key
{
    if ([@"price" isEqualToString:key])
    {
        _price = 0;
    }
    else
    {
        //回调父类的setNilValueForKey,执行默认行为
        [super setNilValueForKey:key];
    }
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"name:%@ price:%d date:%@", _name, _price, date];
}
@end

FKOrder.h

#import <Foundation/Foundation.h>
#import "FKItem.h"
NS_ASSUME_NONNULL_BEGIN

@interface FKOrder : NSObject

@property (nonatomic, strong) FKItem *item;
@property (nonatomic, assign) int amount;

@end

NS_ASSUME_NONNULL_END

FKOrder.m

#import "FKOrder.h"

@implementation FKOrder

@end

main.m

#import <Foundation/Foundation.h>
#import "FKItem.h"
#import "FKOrder.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        FKItem *item = [[FKItem alloc] init];
        [item setValue:@"苹果" forKey:@"name"];
        [item setValue:[NSNumber numberWithInt:5] forKey:@"price"];
        [item setValue:[[NSDate alloc] init] forKey:@"date"];//可以给类实现部分定义的date成员赋值
        NSLog(@"name:%@ price:%@ date:%@", [item valueForKey:@"name"], [item valueForKey:@"price"], [item valueForKey:@"date"]);
        
        //访问不存在的key,会报异常
        [item setValue:@"233" forKey:@"namm"];
        [item valueForKey:@"namm"];
        //给基本类型赋值为nil,会报异常
        [item setValue:nil forKey:@"price"];
        NSLog(@"name:%@ price:%@ date:%@", [item valueForKey:@"name"], [item valueForKey:@"price"], [item valueForKey:@"date"]);
        
        FKOrder *order = [[FKOrder alloc] init];
        [order setValue:@"12" forKey:@"amount"];
        [order setValue:item forKey:@"item"];
        NSLog(@"%@ %@", [order valueForKey:@"amount"], [order valueForKey:@"item"]);
        
        //访问复合属性,用forKeyPath
        [order setValue:@"键盘" forKeyPath:@"item.name"];
        [order setValue:@"100" forKeyPath:@"item.price"];
        NSLog(@"%@ %@", [order valueForKeyPath:@"item.name"], [order valueForKeyPath:@"item.price"]);
    }
    return 0;
}

输出

2020-04-07 00:09:02.306795+0800 KVCTest[15122:475463] name:苹果 price:5 date:Tue Apr  7 00:09:02 2020
2020-04-07 00:09:02.306999+0800 KVCTest[15122:475463] 你设置的key:[namm] 不存在!
2020-04-07 00:09:02.307140+0800 KVCTest[15122:475463] 你访问的key:[namm] 不存在!
2020-04-07 00:09:02.307237+0800 KVCTest[15122:475463] name:苹果 price:0 date:Tue Apr  7 00:09:02 2020
2020-04-07 00:09:02.309560+0800 KVCTest[15122:475463] 12 name:苹果 price:0 date:2020-04-06 16:09:02 +0000
2020-04-07 00:09:02.309722+0800 KVCTest[15122:475463] 键盘 100

相关文章

  • iOS开发--KVC

    KVC键值编码 首先我们先了解下什么是KVC:KVC:Key Value Codeing 键值编码,ios提供的一...

  • iOS 中的 KVC和KVO简介

    1. KVC 1.1 KVC介绍 KVC 是 Key Value Coding 的缩写,即键值编码。在iOS的开发...

  • 2.2 KVC和KVO详解

    image.png KVC KVC定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,...

  • ios开发UI篇—Kvc简单介绍

    一、KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC...

  • iOS之KVC字典转模型的底层实现

    KVC: Key Value Coding (键值编码) 在iOS开发中,KVC是我们经常要使用的技术.那么KVC...

  • iOS 键值编码 KVC

    KVC KVC -- Key Value Coding 键值编码 键值编码的基本概念键值编码是一个用于简介访问对象...

  • iOS中KVC使用及原理解析

    什么是KVC? KVC即Key-Value Coding,意思键-值编码。iOS中键值编码机制是一种由NSKeyV...

  • OC-KVC

    KVC是什么 kvc就是Key-Value Coding(键值编码)。 键值编码是NSKeyValueCoding...

  • iOS中的KVC与KVO,NSNotification通知

    问题: 什么是键值编码KVC,键路径是什么? 什么是键值观察KVO? 键值编码KVC: 键值编码是一种在NSKey...

  • iOS键值编码KVC

    关于KVC的实现原理,网上有好多相关的文章,大同小异,感觉还是形成自己的语言写下来比较好,特写此文。 KVC是什么...

网友评论

      本文标题:IOS键值编码KVC

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