浏览代码

优化代码 rx + vm

openlockPPP 1 年之前
父节点
当前提交
d4e98b0468

+ 28 - 165
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeSubjectPageViewController.swift

@@ -13,27 +13,14 @@ import RxCocoa
 final class MeTraineeSubjectPageViewController: BaseTableViewController {
     
     let cellIdentifier:String = "_MeTraineeSubjectCell"
-    // MARK: 服务属性
-    private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
-   
-    // MARK: UI属性
-    
-    
-    // MARK: 数据
-    var traineeDataModel:TraineeDataModel?
-    var rows:[RowInfo] = []
-    
-    var page:Int = 1
-    var pageSize:Int = 10
-    var state = "1"
-    var schoolId:Int = 0
-    var type:TraineeType?
+    //VM
+    let meTraineeSubjectViewModel = MeTraineeSubjectViewModel()
     
     init(type:TraineeType,state:String,schoolId:Int) {
-        self.type = type
         super.init()
-        self.state = state
-        self.schoolId = schoolId
+        self.meTraineeSubjectViewModel.type = type
+        self.meTraineeSubjectViewModel.state = state
+        self.meTraineeSubjectViewModel.schoolId = schoolId
     }
     
     required convenience init?(coder aDecoder: NSCoder) {
@@ -45,168 +32,44 @@ final class MeTraineeSubjectPageViewController: BaseTableViewController {
         //绑定
         biandView()
         //获取list
-        getCoachInfoList()
-    }
-    
-    // MARK: 私有方法
-    
-    func getCoachInfoList()
-    {
-        page = 1
-        if (self.type == .advancet){ //预报名
-            self.cocahService.coachTempListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
-                .subscribe(onSuccess: { traineeDataModel in
-                    self.rows.removeAll()
-                    self.traineeDataModel = traineeDataModel
-                    self.rows += traineeDataModel.rows!
-                    print("coachInfoListRequest成功")
-                    self.isEmptyDisplay = true
-                    self.hideLoadAnimation()
-                    self.tableView.reloadData()
-                    self.stopRefresh()
-                }, onError: { error in
-                    self.stopRefresh()
-                })
-                .disposed(by: disposeBag)
-            
-            return
-        }else if(self.type == .biandstu){ //绑定学员
-            self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "\(LocalManager.userInfo.id)", coachId: "", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
-                .subscribe(onSuccess: { traineeDataModel in
-                    self.rows.removeAll()
-                    self.traineeDataModel = traineeDataModel
-                    self.rows += traineeDataModel.rows!
-                    print("coachInfoListRequest成功")
-                    self.isEmptyDisplay = true
-                    self.hideLoadAnimation()
-                    self.tableView.reloadData()
-                    self.stopRefresh()
-                    NotificationCenter.default.post(name: Notification.updateItemTopTotalNameNotification, object: [traineeDataModel.total,Int(self.state)!-1])
-                }, onError: { error in
-                    self.stopRefresh()
-                })
-                .disposed(by: disposeBag)
-            return
-        }
-        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
-            .subscribe(onSuccess: { traineeDataModel in
-                self.rows.removeAll()
-                self.traineeDataModel = traineeDataModel
-                self.rows += traineeDataModel.rows!
-                print("coachInfoListRequest成功")
-                self.isEmptyDisplay = true
-                self.hideLoadAnimation()
-                self.tableView.reloadData()
-                self.stopRefresh()
-                NotificationCenter.default.post(name: Notification.updateItemTopTotalNameNotification, object: [traineeDataModel.total,Int(self.state)!-1])
-            }, onError: { error in
-                self.stopRefresh()
-            })
-            .disposed(by: disposeBag)
-    }
-    
-    //更多
-    func getLoadMore(){
-        //计算-页数
-        if (traineeDataModel != nil){
-            let total = pageSize*self.page
-            if(total<(traineeDataModel?.total)!){
-                self.page+=1
-            }else{
-                self.stopLoad()
-                return //已经显示完
-            }
-        }
-        if (self.type == .advancet){ //预报名
-            self.cocahService.coachTempListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
-                .subscribe(onSuccess: { traineeDataModel in
-                    self.traineeDataModel = traineeDataModel
-                    if(traineeDataModel.rows!.count>0){
-                        self.rows += traineeDataModel.rows!
-                    }
-                    print("coachInfoListRequest成功")
-                    self.tableView.reloadData()
-                    self.stopLoad()
-                }, onError: { error in
-                    self.stopLoad()
-                })
-                .disposed(by: disposeBag)
-            return
-        }else if(self.type == .biandstu){ //绑定学员
-            self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "\(LocalManager.userInfo.id)", coachId: "", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
-                .subscribe(onSuccess: { traineeDataModel in
-                    self.traineeDataModel = traineeDataModel
-                    if(traineeDataModel.rows!.count>0){
-                        self.rows += traineeDataModel.rows!
-                    }
-                    print("coachInfoListRequest成功")
-                    self.tableView.reloadData()
-                    self.stopLoad()
-                }, onError: { error in
-                    self.stopLoad()
-                })
-                .disposed(by: disposeBag)
-            return
-        }
-        //请求网络-加载
-        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
-            .subscribe(onSuccess: { traineeDataModel in
-                self.traineeDataModel = traineeDataModel
-                if(traineeDataModel.rows!.count>0){
-                    self.rows += traineeDataModel.rows!
-                }
-                print("coachInfoListRequest成功")
-                self.tableView.reloadData()
-                self.stopLoad()
-            }, onError: { error in
-                self.stopLoad()
-            })
-            .disposed(by: disposeBag)
+        self.meTraineeSubjectViewModel.getCoachInfoList(vc:self)
     }
     
     func biandView(){
         tableView.delegate = self
-        tableView.dataSource = self
+//        tableView.dataSource = self
         tableView.separatorStyle = .none //去除分割线
         tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
         tableView.rowHeight = 288.f
         setupRefreshHeader(tableView) {[unowned self] in
-            self.getCoachInfoList()
+            self.meTraineeSubjectViewModel.getCoachInfoList(vc:self)
         }
         // 设置上拉加载更多
-        tableView.es.addInfiniteScrolling { [weak self] in
-            self?.getLoadMore()
+        tableView.es.addInfiniteScrolling { [unowned self] in
+            self.meTraineeSubjectViewModel.getLoadMore(vc:self)
         }
         self.isEmptyDisplay = false
+        
+        //RX 绑定
+        self.meTraineeSubjectViewModel.items
+            .bind(to: tableView.rx.items(cellIdentifier: cellIdentifier,cellType:MeTraineeSubjectCell.self)) { (row, model, cell) in
+                cell.index_button.setTitle("\(row+1)", for: .normal)
+                cell.setRowInfo(rowInfo:model as! RowInfo)
+            }
+            .disposed(by: disposeBag)
+        // tableView点击事件
+        tableView.rx.itemSelected.subscribe(onNext: { [weak self]indexPath in
+            print("点击\(indexPath)行")
+            let rowInfo:RowInfo = (self!.meTraineeSubjectViewModel.traineeDataModel?.rows![indexPath.row])!
+            if rowInfo != nil {
+                let context: Int = rowInfo.id!
+                NYSwRouter.push(NYSwPushType.trainee_info,context: context)
+            }
+            self?.tableView.deselectRow(at: indexPath, animated: false)
+        }).disposed(by: disposeBag)
     }
     
 }
 
-//数据源
-extension MeTraineeSubjectPageViewController:UITableViewDataSource {
-    
-    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return self.rows.count ?? 0
-    }
-    
-    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeSubjectCell
-        cell.index_button.setTitle("\(indexPath.row+1)", for: .normal)
-        cell.setRowInfo(rowInfo: (self.rows[indexPath.row]))
-        return cell
-    }
-}
-
-//事件
 extension MeTraineeSubjectPageViewController:UITableViewDelegate {
-    
-    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        tableView.deselectRow(at: indexPath, animated: false)
-        let rowInfo = self.rows[indexPath.row]
-        if rowInfo != nil {
-            let context: Int = rowInfo.id ?? 0
-            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
-        }
-    }
-    
 }

+ 140 - 0
JiaPeiManage/Sources/Modulars/学员/ViewModel/MeTraineeSubjectViewModel.swift

@@ -13,4 +13,144 @@ class MeTraineeSubjectViewModel: NSObject {
     // MARK: 服务属性
     private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
     
+    private let itemsSubject = BehaviorSubject<[RowInfo]>(value: [])
+        
+    var items: Observable<[RowInfo]> {
+        return itemsSubject.asObservable()
+    }
+    // MARK: 数据
+    var traineeDataModel:TraineeDataModel?
+    var rows:[RowInfo] = []
+    
+    var page:Int = 1
+    var pageSize:Int = 10
+    var state = "1"
+    var schoolId:Int = 0
+    var type:TraineeType?
+    
+    override init() {
+        super.init()
+//        searchCoachInfoList()
+    }
+    
+    func getCoachInfoList(vc:MeTraineeSubjectPageViewController)
+    {
+        page = 1
+        if (self.type == .advancet){ //预报名
+            self.cocahService.coachTempListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
+                .subscribe(onSuccess: {[unowned self] traineeDataModel in
+                    self.rows.removeAll()
+                    self.traineeDataModel = traineeDataModel
+                    self.rows += traineeDataModel.rows!
+                    itemsSubject.onNext(self.rows)//消息rx
+                    print("coachInfoListRequest成功")
+                    vc.isEmptyDisplay = true
+                    vc.hideLoadAnimation()
+//                    vc.tableView.reloadData()
+                    vc.stopRefresh()
+                }, onError: { error in
+                    vc.stopRefresh()
+                })
+                .disposed(by: vc.disposeBag)
+            
+            return
+        }else if(self.type == .biandstu){ //绑定学员
+            self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "\(LocalManager.userInfo.id)", coachId: "", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
+                .subscribe(onSuccess: {[unowned self] traineeDataModel in
+                    self.rows.removeAll()
+                    self.traineeDataModel = traineeDataModel
+                    self.rows += traineeDataModel.rows!
+                    itemsSubject.onNext(self.rows)//消息rx
+                    print("coachInfoListRequest成功")
+                    vc.isEmptyDisplay = true
+                    vc.hideLoadAnimation()
+//                    vc.tableView.reloadData()
+                    vc.stopRefresh()
+                    NotificationCenter.default.post(name: Notification.updateItemTopTotalNameNotification, object: [traineeDataModel.total,Int(self.state)!-1])
+                }, onError: { error in
+                    vc.stopRefresh()
+                })
+                .disposed(by: vc.disposeBag)
+            return
+        }
+        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
+            .subscribe(onSuccess: {[unowned self] traineeDataModel in
+                self.rows.removeAll()
+                self.traineeDataModel = traineeDataModel
+                self.rows += traineeDataModel.rows!
+                itemsSubject.onNext(self.rows)//消息rx
+                print("coachInfoListRequest成功")
+                vc.isEmptyDisplay = true
+                vc.hideLoadAnimation()
+//                vc.tableView.reloadData()
+                vc.stopRefresh()
+                NotificationCenter.default.post(name: Notification.updateItemTopTotalNameNotification, object: [traineeDataModel.total,Int(self.state)!-1])
+            }, onError: { error in
+                vc.stopRefresh()
+            })
+            .disposed(by: vc.disposeBag)
+    }
+    
+    
+    //更多
+    func getLoadMore(vc:MeTraineeSubjectPageViewController){
+        //计算-页数
+        if (traineeDataModel != nil){
+            let total = pageSize*self.page
+            if(total<(traineeDataModel?.total)!){
+                self.page+=1
+            }else{
+                vc.stopLoad()
+                return //已经显示完
+            }
+        }
+        if (self.type == .advancet){ //预报名
+            self.cocahService.coachTempListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
+                .subscribe(onSuccess: {[unowned self]  traineeDataModel in
+                    self.traineeDataModel = traineeDataModel
+                    if(traineeDataModel.rows!.count>0){
+                        self.rows += traineeDataModel.rows!
+                    }
+                    itemsSubject.onNext(self.rows)//消息rx
+                    print("coachInfoListRequest成功")
+//                    vc.tableView.reloadData()
+                    vc.stopLoad()
+                }, onError: { error in
+                    vc.stopLoad()
+                })
+                .disposed(by: vc.disposeBag)
+            return
+        }else if(self.type == .biandstu){ //绑定学员
+            self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "\(LocalManager.userInfo.id)", coachId: "", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
+                .subscribe(onSuccess: {[unowned self]  traineeDataModel in
+                    self.traineeDataModel = traineeDataModel
+                    if(traineeDataModel.rows!.count>0){
+                        self.rows += traineeDataModel.rows!
+                    }
+                    itemsSubject.onNext(self.rows)//消息rx
+                    print("coachInfoListRequest成功")
+//                    vc.tableView.reloadData()
+                    vc.stopLoad()
+                }, onError: { error in
+                    vc.stopLoad()
+                })
+                .disposed(by: vc.disposeBag)
+            return
+        }
+        //请求网络-加载
+        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: schoolId, state: state)
+            .subscribe(onSuccess: {[unowned self]  traineeDataModel in
+                self.traineeDataModel = traineeDataModel
+                if(traineeDataModel.rows!.count>0){
+                    self.rows += traineeDataModel.rows!
+                }
+                itemsSubject.onNext(self.rows)//消息rx
+                print("coachInfoListRequest成功")
+//                vc.tableView.reloadData()
+                vc.stopLoad()
+            }, onError: { error in
+                vc.stopLoad()
+            })
+            .disposed(by: vc.disposeBag)
+    }
 }