美文网首页
KVC(6) 验证属性

KVC(6) 验证属性

作者: yxibng | 来源:发表于2020-02-01 00:25 被阅读0次

参考Validating Properties

validateValue:forKey:error:
validateValue:forKeyPath:error:
  • 默认的实现会搜索对应对象的validate<Key>:error: 方法
  • 如果没有实现,默认成功,返回YES
  • 如果实现了对应的方法,以方法的执行结果为准
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@end


@implementation Person

- (BOOL)validateName:(inout id _Nullable __autoreleasing *)ioValue error:(out NSError *__autoreleasing  _Nullable *)outError
{
    id obj = *ioValue;
    if ([obj isKindOfClass:NSString.class]) {
        return YES;
    }
    *outError = [NSError errorWithDomain:NSArgumentDomain code:-1 userInfo:nil];
    return NO;
}
@end

Validation of the name property

Person* person = [[Person alloc] init];
NSError* error;
NSString* name = @"John";
if (![person validateValue:&name forKey:@"name" error:&error]) {
    NSLog(@"%@",error);
}

验证结果

- (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;

由于ioValueoutError都是引用类型,因此验证有3种可能的结果

  1. 认为 value 合法,返回 YES, 不修改value
  2. 认为 value 不合法,选择不修改 value, 返回 NO, 设置 error 的值
  3. 认为 value 不合法,创建一个新的 value, 返回 YES

自动验证

  1. Core Data automatically performs validation when the managed object context is saved
  2. Cocoa bindings allow you to specify that validation should occur automatically

关于手动验证的一些参考

iOS Property Validation Built on KVC

相关文章

  • KVC(6) 验证属性

    参考Validating Properties 默认的实现会搜索对应对象的validate:error:...

  • iOS KVC键值编码

    KVC键值编码,这个功能很强大,它可以改变私有属性和只读属性。 KVC操作方法如下: 设置setValue:属性值...

  • iOS KVC的几种情况简析

    kvc取值时,需注意的几点问题; 讲解一下kvc各种问题,包括基础属性赋值,属性对象的属性赋值,私有属性赋值 以及...

  • KVC的简单使用

    KVC字典转模型 KVC 中经常使用的就是字典转模型 KVC的大招 KVC设置对象属性及取值 KVC间接设置对象属...

  • iOS之KVC与KVO

    KVC: kvc:Key Value Coding,即键值编码,可以动态设置的对象的属性值。 动态设置设置属性,优...

  • iOS - 修改声明为readonly的属性值

    1、当我们声明一个 readonly 的属性,外部可能会通过 KVC 修改该属性值。2、为了避免 KVC 修改属性...

  • iOS修改声明为readonly的属性值

    当我们声明一个 readonly 的属性,外部可能会通过 KVC 修改该属性值。为了避免 KVC 修改属性值,须将...

  • iOS-KVC/KVO

    一、KVC 通过关键字,访问属性及成员变量。1.kvc当调用setValue:属性值 forKey:@”name“...

  • iOS KVC KVO的简单使用

    一、 kvc 1. KVC(Key-value coding)键值编码 通过对象的属性名(不管该属性是否暴露)直接...

  • KVC详解

    KVC定义 KVC(Key-value coding)键值编码。通过来直接访问对象的属性,或者为属性赋值...

网友评论

      本文标题:KVC(6) 验证属性

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