美文网首页iOS
iOS-KVC(六)正确性验证

iOS-KVC(六)正确性验证

作者: 厦门_小灰灰 | 来源:发表于2019-06-23 18:05 被阅读0次

    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<Key>: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(六)正确性验证

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