fix
无故事王国
2024-03-04 54c6ef0be42d9f2e49a344fd69f231cb6df43797
WanPai/ViewModel/RefreshModel.swift
@@ -24,19 +24,16 @@
    associatedtype T:HandyJSON
    func api()->(Observable<BaseResponse<[T]>>)?
}
protocol RefreshModelInnerProctol {
            associatedtype T:HandyJSON
            func api()->(Observable<BaseResponse<BaseResponseList<T>>>)?
}
class RefreshModel<T:HandyJSON>:RefreshModelProctol{
    func api() -> (RxSwift.Observable<BaseResponse<[T]>>)? {
        return nil
    }
            func api() -> (RxSwift.Observable<BaseResponse<[T]>>)? {return nil}
    let disposeBag = DisposeBag()
    enum RefreshType {
        case refresh,load
    }
            enum RefreshType {case refresh,load}
    private var handle:UIScrollView!
@@ -68,7 +65,6 @@
    func beginRefresh(){
        handle.mj_header?.beginRefreshing()
    }
    func refreshData() ->(()->Void) {
        return {self.request(status: .refresh)}
@@ -112,6 +108,90 @@
    }
}
class RefreshInnerModel<T:HandyJSON>:RefreshModelInnerProctol{
            func api() -> (RxSwift.Observable<BaseResponse<BaseResponseList<T>>>)? {
                        return nil
            }
            let disposeBag = DisposeBag()
            enum RefreshType {case refresh,load}
            private var handle:UIScrollView!
            lazy var refreshSubject = PublishSubject<RefreshState>()
            var page:Int = 0
            var pageSize:Int = 20
            private var needRefreshData:Bool = true
            lazy var dataSource = BehaviorRelay<BaseResponseList<T>?>(value: nil)
            func configure(_ scrollView:UITableView,needMore:Bool = true){
                        scrollView.mj_header = CustomRefreshHeaer.refreshing(with: refreshData())
                        if needMore{
                                    scrollView.mj_footer = CustomRefreshFooter.refreshing(with: loadMoreData())
                        }
                        refreshSubject.bind(to: scrollView.rx.handlestatus()).disposed(by: disposeBag)
                        handle = scrollView
            }
            func configure(_ scrollView:UICollectionView,needMore:Bool = true,needRefreshData:Bool = true){
                        self.needRefreshData = needRefreshData
                        scrollView.mj_header = CustomRefreshHeaer.refreshing(with: refreshData())
                        if needMore{
                                    scrollView.mj_footer = CustomRefreshFooter.refreshing(with: loadMoreData())
                        }
                        refreshSubject.bind(to: scrollView.rx.handlestatus()).disposed(by: disposeBag)
                        handle = scrollView
            }
            func beginRefresh(){
                        handle.mj_header?.beginRefreshing()
            }
            func refreshData() ->(()->Void) {
                        return {self.request(status: .refresh)}
            }
            func loadMoreData() ->(()->Void) {
                        return {self.request(status: .load)}
            }
            func request(status:RefreshType){
                        switch status {
                                    case .refresh:
                                                self.page = 1
                                                self.refreshSubject.onNext(.refreshing)
                                    case .load:
                                                self.page += 1
                                                self.refreshSubject.onNext(.moreLoading)
                        }
                        api()?.subscribe(onNext: { data in
                                    switch status{
                                                case .refresh:
                                                            self.dataSource.accept(data.data)
                                                            self.refreshSubject.onNext(.completedRefresh)
                                                case .load:
                                                            var new = self.dataSource.value?.list ?? []
                                                            new.append(contentsOf: data.data?.list ?? [])
                                                            var model = self.dataSource.value
                                                            model!.list = new
                                                            self.dataSource.accept(model)
                                                            if data.data?.list.count == 0{
                                                                        self.refreshSubject.onNext(.completedLoadWithNoMoreData)
                                                            }else{
                                                                        self.refreshSubject.onNext(.completedLoad)
                                                            }
                                    }
                        }, onError: { error in
                                    self.refreshSubject.onNext(.completedLoad)
                        }).disposed(by: disposeBag)
            }
}
class CustomRefreshHeaer:MJRefreshNormalHeader{
    static func refreshing(with refreshingBlock: @escaping MJRefreshComponentAction) -> MJRefreshNormalHeader? {
        let refreshHeader = MJRefreshNormalHeader(refreshingBlock: refreshingBlock)