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有效性的判断。
网友评论