in iOS ~ read.

iOS - MitRegx

  • MitRegx,这个小轮子写了很长时间了,感觉还算比较实用。

一、困扰

  • 以往我们在登录注册的时候要去校验诸如账号、密码和验证码的一些格式是否正确,可能会写出如下的代码:
if (账号的格式正确&&密码的格式正确&&验证码的格式正确){  
      [发送网络请求进行下一步]
}
  • 这样的代码看上去很难受。

二、函数式编程

  • 那个时候用 Masonry,体会了函数式编程的好处:
    • 代码简洁
    • 易于理解
    • 方便代码管理

MitRegx

  • MitRegx 分4个部分
    • MitRegx.h 头文件,便于类的导入。
    • MitRegxConst.h ,这个类中存放了一些错误状态的常量。
    • MitRegexMaker.h 核心逻辑处理类,在这里对通用的验证逻辑进行处理。
/** 校验状态 */
@property(nonatomic, assign)MitRegexStateType status;
/** 返回状态文本 */
@property(nonatomic, strong)NSString * statusString;
/** 是否通过了校验 
    当连续校验多个值的时候会使用到此值.
 */
@property(nonatomic, getter=isPassed)BOOL passed;
/** 校验手机号 */
-(MitRegexMaker * (^)(NSString * str))validatePhone;
/** 校验密码 */
-(MitRegexMaker * (^)(NSString * str))validatePsd;
/** 校验验证码 */
-(MitRegexMaker * (^)(NSString * str))validateCodeNumber;
/** 验证身份证 */
-(MitRegexMaker * (^)(NSString * str))validatePersonalId;
/** 验证 email */
-(MitRegexMaker*(^)(NSString *))validateEmail;
- NSObject+mitRegexMaker.h 初始化类扩展,提供不同返回值的初始化方式,使用者可以按需调用。
/** 获取处理类 */
+(MitRegexMaker*)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block;
/**
 *  状态码 + 状态码信息 (Block)
 *  @param block    校验处理类
 *  @param mitBlock 返回状态值信息(只有当校验状态全部通过的时候, isPassed 才返回 Yes)
 */
+(void)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block MitValue:(void(^)(MitRegexStateType statusType,NSString * statusStr,BOOL isPassed))mitBlock;
/** 返回状态码 */
+(MitRegexStateType)mit_makeMitRegexStatusMaker:(void (^)(MitRegexMaker * maker))block;
/** 返回状态码所对应状态信息 */
+(NSString *)mit_makeMitRegexStatusStringMaker:(void (^)(MitRegexMaker * maker))block;
  • 调用方式
 /** 
     如果之前前面一个条件的校验未通过,将不会再进行下一个校验,返回的状态值也是未通过的校验值
     只有当校验条件全部通过的时候, isPassed 才为1.
     */
    [NSObject mit_makeMitRegexMaker:^(MitRegexMaker *maker) {
maker.validateCodeNumber(@"1234").validatePhone(@"15941281116").validatePsd(@"123456").validatePersonalId(@"2103021991071").validateEmail(@"41692292@roo.bo");  
    } MitValue:^(MitRegexStateType statusType, NSString * statusStr , BOOL isPassed) {
        NSLog(@"是否通过校验 = %d 状态码 = %ld, 状态详细 = %@",isPassed,statusType,statusStr);
    }];
  • 设计的核心思路,通过NSObject+mitRegexMaker.h 中提供的类方法完成 MitRegexMaker 实例的创建,并通过代码块返回实例,接着在代码块中按需调用 MitRegexMaker 的校验方法完成校验,这里每个校验方法都会返回实例本身,以便进行下一次的格式校验。

  • 更详细的代码和使用方法在 MitRegx,希望大家多提宝贵意见。

comments powered by Disqus