iOS - MitRegx 函數(shù)式編程實例

  • MitRegx擦秽,這個小輪子寫了很長時間秧均,感覺還算比較實用。

困擾

  • 以往我們在登錄注冊的時候要去校驗諸如賬號、密碼和驗證碼的一些格式是否正確链快,可能會寫出如下的代碼:
if (賬號的格式正確&&密碼的格式正確&&驗證碼的格式正確){
      [發(fā)送網(wǎng)絡(luò)請求進(jìn)行下一步]
}
  • 這樣的代碼看上去很難受。

函數(shù)式編程

  • 那個時候用 Masonry巨双,體會了函數(shù)式編程的好處:
    • 代碼簡潔
    • 易于理解
    • 方便代碼管理

MitRegx

  • MitRegx 分4個部分
    • MitRegx.h 頭文件霉祸,便于類的導(dǎo)入。
    • MitRegxConst.h 丝蹭,這個類中存放了一些錯誤狀態(tài)的常量。
    • MitRegexMaker.h 核心邏輯處理類镜沽,在這里對通用的驗證邏輯進(jìn)行處理贱田。
/** 校驗狀態(tài) */
@property(nonatomic, assign)MitRegexStateType status;
/** 返回狀態(tài)文本 */
@property(nonatomic, strong)NSString * statusString;
/** 是否通過了校驗 
    當(dāng)連續(xù)校驗多個值的時候會使用到此值.
 */
@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 初始化類擴展,提供不同返回值的初始化方式男摧,使用者可以按需調(diào)用。
/** 獲取處理類 */
+(MitRegexMaker*)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block;
/**
 *  狀態(tài)碼 + 狀態(tài)碼信息 (Block)
 *  @param block    校驗處理類
 *  @param mitBlock 返回狀態(tài)值信息(只有當(dāng)校驗狀態(tài)全部通過的時候, isPassed 才返回 Yes)
 */
+(void)mit_makeMitRegexMaker:(void(^)(MitRegexMaker * maker))block MitValue:(void(^)(MitRegexStateType statusType,NSString * statusStr,BOOL isPassed))mitBlock;
/** 返回狀態(tài)碼 */
+(MitRegexStateType)mit_makeMitRegexStatusMaker:(void (^)(MitRegexMaker * maker))block;
/** 返回狀態(tài)碼所對應(yīng)狀態(tài)信息 */
+(NSString *)mit_makeMitRegexStatusStringMaker:(void (^)(MitRegexMaker * maker))block;
  • 調(diào)用方式
 /** 
     如果之前前面一個條件的校驗未通過,將不會再進(jìn)行下一個校驗,返回的狀態(tài)值也是未通過的校驗值
     只有當(dāng)校驗條件全部通過的時候, 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 狀態(tài)碼 = %ld, 狀態(tài)詳細(xì) = %@",isPassed,statusType,statusStr);
    }];
  • 設(shè)計的核心思路,通過NSObject+mitRegexMaker.h 中提供的類方法完成 MitRegexMaker 實例的創(chuàng)建帆离,并通過代碼塊返回實例,接著在代碼塊中按需調(diào)用 MitRegexMaker 的校驗方法完成校驗哥谷,這里每個校驗方法都會返回實例本身,以便進(jìn)行下一次的格式校驗猜扮。

  • 更詳細(xì)的代碼和使用方法在 MitRegx监婶,希望大家多提寶貴意見齿桃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煮盼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子僵控,更是在濱河造成了極大的恐慌,老刑警劉巖报破,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件充易,死亡現(xiàn)場離奇詭異,居然都是意外死亡盹靴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門宇立,熙熙樓的掌柜王于貴愁眉苦臉地迎上來自赔,“玉大人,你說我怎么就攤上這事绍妨。” “怎么了他去?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵灾测,是天一觀的道長爆价。 經(jīng)常有香客問我媳搪,道長,這世上最難降的妖魔是什么序愚? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任等限,我火速辦了婚禮芬膝,結(jié)果婚禮上形娇,老公的妹妹穿的比我還像新娘锰霜。我一直安慰自己桐早,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丽惶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪万哪。 梳的紋絲不亂的頭發(fā)上抡秆,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音儒士,去河邊找鬼。 笑死着撩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的氓润。 我是一名探鬼主播薯鳍,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挖滤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悯舟,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤砸民,失蹤者是張志新(化名)和其女友劉穎奋救,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝艘,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡姿染,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狡汉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闽颇。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兵多,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衅斩,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布畏梆,位于F島的核電站惫搏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筐赔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一达皿、第九天 我趴在偏房一處隱蔽的房頂上張望贿肩。 院中可真熱鬧峦椰,春花似錦汰规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽餐茵。三九已至,卻和暖如春忿族,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背道批。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工隆豹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留走趋,地道東北人噪伊。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓氮唯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豆励。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 前言 Blocks是C語言的擴充功能良蒸,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,768評論 0 23
  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進(jìn)行加密后保存到用戶偏好設(shè)置( [NSUserDefaul...
    彬至睢陽閱讀 2,927評論 0 7
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評論 25 707
  • 幾分鐘內(nèi)學(xué)習(xí) Clojure - 技術(shù)翻譯 - 開源中國社區(qū)http://www.oschina.net/tran...
    葡萄喃喃囈語閱讀 139評論 0 0