最近碰到接口返回的數據是一個遞歸數據,例如一個公司有多個部門,部門中可能有多個子部門,也有可能沒有子部門。這裏使用了遞歸處理數據
數據模型大概如下,在類中有許多屬性,同時有一個數組是存放這個類,然後對返回數據進行解析
@interface EFDeptModel : NSObject
@property(nonatomic,copy)NSString *deptName;
@property(nonatomic,copy)NSArray<EFDeptModel*> *children;
@end
首先,請求接口後返回的是一個數組,對數組使用for in循環遍歷,每遍歷一次就創建一個Department類,由於數組中存放的是一個鍵值對數據,根據鍵值獲取數據後複製給類的屬性,由於children返回的仍然是一個數組,但是數組不一定存在數據。
之後,根據數組是否爲空進行選擇,如果children爲空,那麼就將model添加到新創建的數組中,若不爲空,那麼就需要繼續遍歷數組,然後創建Department類,給類的屬性賦值,然後判斷children是否爲空。
因此可以調用方法本身,從而實現遞歸。
具體代碼如下:
-(NSArray *)getDeptData:(NSArray *)array{
NSMutableArray *modelArray =[NSMutableArray array];
for (NSDictionary *dic in array) {
EFDeptModel *model = [EFDeptModel new];
model.leaderName = [dic objectForKey:@"leaderName"];
NSArray *childrenArray =(NSArray *)[dic objectForKey:@"children"];
if (childrenArray.count !=0 && childrenArray !=nil) {
model.children =[self getDeptData:childrenArray];
[modelArray addObject:model];
}else{
[modelArray addObject:model];
}
model = nil;
}
return [NSMutableArray arrayWithArray:modelArray];
}