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對系統方法進行替換,而且留給開發者自己選擇是否使用容錯方法,畢竟有些開發者明確的情況下,少一步判斷就可以節省一點性能。
歡迎留言交流。