022.KVC 如何处理不合理的nil值

来源:互联网 发布:sql存储过程输出参数 编辑:程序博客网 时间:2024/05/01 13:03
---------------  FKItem.h  ---------------
#import <Foundation/Foundation.h>

@interface FKItem : NSObject
@property(nonatomic , copy) NSString* name;
@property(nonatomic , assign) int price;
@end

---------------  FKItem.m  ---------------
#import "FKItem.h"

@implementation FKItem
- (
void)setNilValueForKey: (id)key
{
     if([key isEqualToString:@"price"])
     {
          _price = 0;
     }
     else
     {
          [super setNilValueForKey: key];
     }
}
@end

---------------  main.m  ---------------
#import <Foundation/Foundation.h>
#import "FKItem.h"

int main()
{
    FKItem* item = [[FKItem alloc] init];
    [item setValue:
nil forKey:@"name"];
    [item setValue:
nil forKey:@"price"];
    NSLog(
@"itemname为:%@", [item valueForKey:@"name"]);
    NSLog(
@"itemprice为:%@", [item valueForKey:@"price"]);
}

一、编写本节代码的具体步骤:
1.可仿照第二章001节的代码编写步骤。

二、本节代码涉及到的知识点:
1.如果我们使用KVC给一个基本数据类型的成员变量设置一个nil值,KVC会自动调用setNilValueForKey方法。
2.不过,这个方法的实现必须由我们自己来写,如果我们不写,系统还是会报错。
3.这个方法可以不声明,因为只要写了方法的实现,KVC就会自动找到它。
4.我们在写setNilValueForKey方法的实现的时候,可以自行决定nil值如何处理。
5.在本节代码中,给name赋nil值是合理的,输出正常。给price赋nil值是不合理的,应该转成0或其他数值。

0 0
原创粉丝点击