iOS KVC(一)基本了解
iOS KVC (二) 不可不知的赋值深层次原理
iOS KVC (三)不可不知的取值深层次原理
iOS KVC (四)keyPath的深度解析
iOS KVC (五)KVC几种典型的异常处理
iOS KVC (六) KVC容器类及深层次原理
iOS KVC(七) KVC正确性的验证
iOS KVC (八) KVC几种常见应用
iOS KVC (九) KVC模型转化(1) 模型打印 description, debugDescription
iOS KVC (十)模型转换(2)模型转换
KVC正确性的验证
当开发者需要验证能不能用KVC设定某个值时,就需要在进行KVC赋值前验证值value的有效性,API文档里面提供下面的方法进行判断值的有效性。
- (BOOL)validateValue:(inout id __nullable * __nonnull)ioValue forKey:(NSString *)inKey error:(out NSError **)outError;
该方法的工作原理:先找一下你的类中是否实现了方法-(BOOL)validate<Key>:error:,如果实现了就会根据实现方法里面的自定义逻辑返回NO或者YES,如果没有实现这个方法,则系统默认返回就是YES。
下面我们看一下示例代码
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, copy) NSString *personName;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
NSError *error;
NSString *key = @"personName";
NSString *value = @"小明";
BOOL result = [self validateValue:&value forKey:key error:&error];
if (error) {
NSLog(@"error = %@", error);
return;
}
if (result) {
NSLog(@"验证正确是小明");
}
else {
NSLog(@"不是小明");
}
}
- (BOOL)validatePersonName:(id *)value error:(out NSError * _Nullable __autoreleasing *)outError
{
NSString *name = *value;
if ([name isEqualToString:@"小明"]) {
return YES;
}
return NO;
}
打印数据:
2018-05-17 16:38:32.998141+0700 KVC[32204:879065] 验证正确是小明
这里首先调用方法[self validateValue:&value forKey:key error:&error];,这里,由于我实现了方法- (BOOL)validatePersonName:(id *)value error:(out NSError * _Nullable __autoreleasing *)outError,所以就在这里进行值value有效性的判断,这里[name isEqualToString:@"小明"]我就给返回YES,否则就返回NO。
上面这个小的示例还是很简单的,就是验证value赋值前的有效性判断。