Objective-C模型验证器是一组类和分类,用于向您的应用程序添加简单的模型验证。
该项目受到了著名的ActiveRecord Ruby框架的启发。
在Objective-C中进行验证需要一些努力,而且我急需它。了解ActiveRecord使我做到了这一点。
使用cocoapods导入
pod 'ObjcModelValidation', '~> 0.2'
#import "ValidationModel.h"
@interface SampleModel : ValidationModel
@property (nonatomic, strong) NSString *nameString;
@property (nonatomic, strong) NSNumber *ageNumber;
@end
请注意,它继承自ValidationModel。
此模型中使用的所有属性都将根据其类进行验证。
#import "SampleModel.h"
@implementation SampleModel
-(NSError *)validateAgeNumber:(NSNumber *)ageNumber{
if ([ageNumber greaterThan:@18] && [ageNumber presence]) {
return nil;
}
return [self errorWithLocalizedMessage:NSLocalizedString(@"You should be older than 18.", @"")];
}
-(NSError *)validateNameString:(NSString *)nameString{
if ([nameString lengthMin:4]) {
return nil;
}
return [self errorWithLocalizedMessage:NSLocalizedString(@"Your name should be at least 4 characters long", @"")];
}
@end
请注意,每个验证方法的语法为:-(NSError *)validate<CapitalizedVariableName>:(<VariableClass> *)<variableName>;
目前这仅适用于对象。因此,如果您在任何地方存储了NSInteger
或BOOL
,请使用NSNumber
代替。
要开始验证您的模型,请创建它们并保存。每个模型都有其自己的保存方法,它返回一个包含NSError
对象的NSArray
。
示例
SampleModel *sample = [[SampleModel alloc] init];
sample.nameString = @"Piet";
sample.ageNumber = @22;
NSArray *errors = [sample save];
if (errors.count != 0) {
PBLog(@"I got some errors here.");
for (NSError *error in errors) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:error.localizedDescription delegate:nil cancelButtonTitle:@"Hide" otherButtonTitles:nil];
[alertView show];
}
}
请注意,当重写save
时,您必须调用[super save];
。否则,验证将不会调用。
如果一切符合要求,您将在控制台上看到一条日志。
检查值是否存在。
此方法应该被其他验证类重写,以获取特定类的存在验证。
-(BOOL)presence;
检查特定方法并执行自定义验证。
-(BOOL)validatesWithSelector:(SEL)selector;
检查referenceNumber是否大于self
-(BOOL)greaterThan:(NSNumber *)referenceNumber;
检查referenceNumber是否小于self
-(BOOL)lessThan:(NSNumber *)referenceNumber;
接受一个字符串数组并在self中搜索它。
如果字符串在字符串中没有找到,则返回YES。
-(BOOL)exclusion:(NSArray *)exclusionArray;
使用正则表达式字符串进行验证。
-(BOOL)format:(NSString *)regexExpression;
接受一个字符串数组并在self中搜索它。
如果字符串在字符串中找到,则返回YES。
-(BOOL)inclusion:(NSArray *)inclusionArray;
最小长度验证
-(BOOL)lengthMin:(NSInteger)length;
最大长度验证
-(BOOL)lengthMax:(NSInteger)length;
范围验证
-(BOOL)lengthIn:(NSInteger)lengthMin and:(NSInteger)lengthMax;
精确范围验证
-(BOOL)lengthIs:(NSInteger)length;
如果字符串只包含数字则验证成功
-(BOOL)numericality;
Fork 仓库,编写测试并提交拉取请求。