gpt4 book ai didi

ios - 在返回对象之前验证每个属性

转载 作者:可可西里 更新时间:2023-11-01 03:14:39 26 4
gpt4 key购买 nike

在使用 Mantle 时,是否有可能在返回我们正在创建的对象之前(在本例中通过 JSON)验证 X 和 Y 属性不为零?

想象一下这个类:

@interface Person : MTLModel <MTLJSONSerializing>

@property(nonatomic,strong,readonly)NSString *name;
@property(nonatomic,strong,readonly)NSString *age;

@end

我想要一种方法来验证如果我收到的 JSON 没有名称(由于某种原因服务器的数据库出现问题)我将返回一个nil Person,因为在没有设置该属性的情况下创建该对象是没有意义的。

最佳答案

虽然您可以覆盖初始化程序。覆盖 validate: 似乎更简洁,因为这是在 Mantle 返回反序列化对象之前的最后阶段调用的。将所有验证逻辑放在 validate 方法中是有意义的...

查看 MTLJSONAdapter 的最后一行

id model = [self.modelClass modelWithDictionary:dictionaryValue error:error];
return [model validate:error] ? model : nil;

这告诉我们,如果我们的自定义模型从 validate 返回 NO,那么 Mantle 将丢弃该对象。

所以你可以在你的子类中简单地执行以下操作:

- (BOOL)validate:(NSError **)error {
return [super validate:error] && self.name.length > 0;
}

理想情况下,在您自己的实现中,您可能希望返回适当的错误。

validate 方法将调用 Foundation 的 validateValue:forKey:error: 为您在 JSONKeyPathsByPropertyKey 中向 Mantle 注册的每个属性。因此,如果您想要更可控的验证设置,您也可以在此处验证您的数据。

关于ios - 在返回对象之前验证每个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23291261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com