iOS開發容錯處理--YRClassSafeCategory
YRClassSafeCategory
最近發現還是有很多朋友在問類似解析時容錯問題怎麼解決,想了想,就把幾年前做的,一直在使用的小容錯庫開源出來。
iOS開發中,經常遇到解析字典或其他轉換的情況,比如下面這個dictionary:
NSDictionary *dictionary = @{@"num1":@1, @"num2":@"2", @"string":@"this is a string", @"dic":@{@"key":@"value"}, @"array":@[@1,@2], };
一般的解析
-(void)parseDic:(NSDictionary*)dictionary{ NSInteger num1; id num1Obj = [dictionary objectForKey:@"num1"]; if (num1Obj) { if ([num1Obj isKindOfClass:[NSNumber class]]) { num1 = [num1Obj integerValue]; }else if([num1Obj isKindOfClass:[NSString class]]){ num1 = [num1Obj integerValue]; } } NSDictionary *dic = [dictionary objectForKey:@"dic"]; if (dic&&[dic isKindOfClass:[NSDictionary class]]) { //繼續處理 } //。。。其他之類的 NSString *key;//又或者,你遇到了一個傳值過來的key,需要判斷key是否存在(否則會崩潰) if(key){ NSString *string = [dic objectForKey:key]; }}
使用了我的容錯庫後
-(void)parseDic:(NSDictionary*)dictionary{ NSInteger num1 = [dictionary integerForKeySafe:@"num1"]; NSDictionary *dic = [dictionary dictionaryForKeySafe:@"dic"]; //。。。其他之類的 NSString *key;//又或者,你遇到了一個傳值過來的key,需要判斷key是否存在 NSString *string = [dic objectForKeySafe:key];}
從此解析寫起來so easy,而且媽媽再也不用擔心你容錯不到位產生崩潰了!
本人對以下幾種情況都做了相應處理,主要包括:
1. NSString的數值轉換、字串截取
2. NSNumber的數值轉換
3. NSDictionary的各種取值和空key處理
4. NSArray的各種越界情況處理
5. …
當發生了出錯情況時,比如解析需要一個dic,但是傳回型別為string,此時使用我的容錯庫會得到nil,由於nil的任何訊息都能安全執行通過,因此不會出現崩潰。
其實目前iOS開發界類似的庫也是存在的,比如DurexKit和VDM。有興趣的也可以去看看。
另外,我這個並未使用runtime對系統方法進行替換,而且留給開發人員自己選擇是否使用容錯方法,畢竟有些開發人員明確的情況下,少一步判斷就可以節省一點效能。
歡迎留言交流。