Nessuna descrizione

MineGroupViewModel.swift 3.4KB

    // // MineGroupViewModel.swift // PaiAi // // Created by LISA on 2017/5/8. // Copyright © 2017年 yb. All rights reserved. // import UIKit import RxSwift import RxCocoa import RxDataSources public protocol MineGroupViewModelDelegate: class { func didSelect(_ item: GroupItem) } public class MineGroupViewModel { private let repository: GroupRepository private var disposeBag = DisposeBag() private var page = 1 private var _isLoading = PublishSubject<Bool>() private var _isEmpty = BehaviorRelay<Bool>(value: false) private var _hasMoreData = PublishSubject<Bool>() private var _showMessage = PublishSubject<String>() private let items = BehaviorRelay<[GroupItem]>(value: []) public weak var delegate: MineGroupViewModelDelegate? public var isEmpty: Observable<Bool> { return _isEmpty.asObservable() } public var hasMoreData: Observable<Bool> { return _hasMoreData.asObservable() } public var isLoading: Observable<Bool> { return _isLoading.asObserver() } public var showMessage: Observable<String> { return _showMessage.asObservable() } public var contents: Observable<[AnimatableSectionModel<Int, GroupItem>]> { return items.map({ model in return [AnimatableSectionModel(model: 0, items: model)] }) } public init() { self.repository = PhotoGroupRepository() } public func reload() { page = 1 repository.load(page: page) .asDriver(onErrorJustReturn: NetworkArrayData<GroupItem>.empty()) .drive(onNext: {[weak self] (model) in guard let `self` = self else { return } self._hasMoreData.onNext(model.hasMore) self._isEmpty.accept(!model.data.isEmpty) self.items.accept(model.data) }, onDisposed: {[weak self] in guard let `self` = self else { return } self._isLoading.onNext(true) }).disposed(by: disposeBag) } public func preload() { page += 1 repository.load(page: page) .asDriver(onErrorJustReturn: NetworkArrayData<GroupItem>.empty()) .drive(onNext: {[weak self] (model) in guard let `self` = self else { return } self._hasMoreData.onNext(model.hasMore) self.items.accept(self.items.value + model.data) }, onDisposed: {[weak self] in guard let `self` = self else { return } self._isLoading.onNext(false) }).disposed(by: disposeBag) } public func remove(of index: Int) { repository.remove(groupId: items.value[index].group_id) .subscribe(onCompleted: {[weak self] in guard let `self` = self else { return } var _items = self.items.value _items.remove(at: index) self.items.accept(_items) self._showMessage.onNext("删除成功") }) { (error) in guard let error = error as? InteractionError else { return } self._showMessage.onNext(error.errMessage) }.disposed(by: disposeBag) } public func didSelect(_ item: GroupItem) { delegate?.didSelect(item) } }