oc 處理遞歸數據

最近碰到接口返回的數據是一個遞歸數據,例如一個公司有多個部門,部門中可能有多個子部門,也有可能沒有子部門。這裏使用了遞歸處理數據

數據模型大概如下,在類中有許多屬性,同時有一個數組是存放這個類,然後對返回數據進行解析

@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];
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章