KVC解析(七) —— KVC正确性的验证

版本记录

版本号 时间
V1.0 2017.09.12

前言

KVC相信大家再熟悉不过了,键值编码,可以解决很多问题,包括视图上的给UITextField占位文字颜色大小进行设置等等,还有很多地方可以用KVC,接下来几篇我们就深度解析一下KVC。总结一下,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。还是老规矩,由面到点,由浅到深,希望对大家有所帮助。感兴趣的可以看我写的另外几篇文章。
1. KVC解析(一) —— 基本了解
2. KVC解析(二) —— 不可不知的赋值深层次原理
3. KVC解析(三) —— 不可不知的取值深层次原理
4. KVC解析(四) —— keyPath的深度解析
5. KVC解析(五) —— KVC几种典型的异常处理
6. KVC解析(六) —— KVC容器类及深层次原理

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 "JJKVCVerifiedVC.h"

@interface JJKVCVerifiedVC ()

@property (nonatomic, copy) NSString *personName;

@end

@implementation JJKVCVerifiedVC

#pragma mark - Override Base Function

- (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(@"不是小明");
    }
}

#pragma mark - Object Private Function

- (BOOL)validatePersonName:(id *)value error:(out NSError * _Nullable __autoreleasing *)outError
{
    NSString *name = *value;
    if ([name isEqualToString:@"小明"]) {
        return YES;
    }
    return NO;
}

@end

下面看输出结果

2017-09-12 22:09:42.878 JJOC[9834:292358] 验证正确是小明

这里首先调用方法[self validateValue:&value forKey:key error:&error];,这里,由于我实现了方法- (BOOL)validatePersonName:(id *)value error:(out NSError * _Nullable __autoreleasing *)outError,所以就在这里进行值value有效性的判断,这里[name isEqualToString:@"小明"]我就给返回YES,否则就返回NO。

上面这个小的示例还是很简单的,就是验证value赋值前的有效性判断。

后记

未完,待续~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容