iOS-KVC(六)正确性验证

iOS-KVC(一)基本使用
iOS-KVC(二)内部赋值深层次原理
iOS-KVC(三)内部取值深层次原理
iOS-KVC(四)常见异常处理
iOS-KVC(五)容器类
iOS-KVC(六)正确性验证
iOS-KVC(七)字典相关
iOS-KVC(八)常见使用

KVC提供了属性值,用来验证key对应的Value是否可用的方法。

- (BOOL)validateValue:(inout id _Nullable * _Nonnull)ioValue forKey:(NSString *)inKey error:(out NSError **)outError;

- (BOOL)validateValue:(inout id _Nullable * _Nonnull)ioValue forKeyPath:(NSString *)inKeyPath error:(out NSError **)outError;

该方法的工作原理:

  • 先找一下你的类中是否实现了方法 -(BOOL)validate:error:

  • 如果实现了就会根据实现方法里面的自定义逻辑返回NO或者YES

  • 如果没有实现这个方法,则系统默认返回就是YES

简单示例:

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, copy) NSString *name;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSError *error = nil;
    NSString *value = @"hui";
    BOOL result = [self validateValue:&value forKey:@"name" error:&error];
    
    if ( error ) {
        NSLog(@"error = %@", error);
    }
    
    if ( result ) {
        NSLog(@"validate success");
    } else {
        NSLog(@"validate failure");
    }

}

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


@end

结果:
2019-06-23 15:06:24.132692+0800 study[10997:159723] validate success

由于我们实现了-validateName: error:的方法,所以就在这里进行值value有效性的判断。

你可能感兴趣的:(iOS-KVC(六)正确性验证)