-
刷新狀態(tài)(枚舉)
public enum RefreshStatus: Int {
case DropDownSuccess // 下拉成功
case PullSuccessHasMoreData // 上拉,還有更多數(shù)據(jù)
case PullSuccessNoMoreData // 上拉,沒有更多數(shù)據(jù)
case InvalidData // 無效的數(shù)據(jù)
}
-
創(chuàng)建ViewModel類,http請求類是一個對Alamofire的封裝
class SchNoticeViewModel: SLViewModel {
static let shareInstance = SchNoticeViewModel()
var top = 10
var page = 1, t = 9
//數(shù)據(jù)獲取
func getData() {
ALTools().rx_RequestXML(schNoticeApi.getData(page: self.page, top: self.top, uid: User.info.userID, schID: User.info.schID!, t: self.t)).subscribe(onNext: { (data) in
//SwiftJSON
let json = JSON(data: data)
let realm = try! Realm()
if self.page == 1 {
//第一頁,下拉刷新的時候需要刪除本地的所有數(shù)據(jù)
try! realm.write {
let objc = realm.objects(SchNoticeModel.self)
realm.delete(objc)
}
}
for mjson in json.arrayValue {
let model = SchNoticeModel()
....
//json解析,realm保存
try! realm.write {
realm.add(model, update: true)
}
}
if self.page == 1 {
self.refreshStatus.value = .DropDownSuccess
return
}
self.refreshStatus.value = json.count < top ? .PullSuccessNoMoreData:.PullSuccessHasMoreData
}).addDisposableTo(disposeBag)
}
}
-
控制器中
- 定義dataSource: var dataSource = Variable(SchNoticeModel)
- dataSource綁定到tableview
self.dataSource.asObservable().bind(to: self.tableView.rx.items(cellIdentifier: identifier, cellType: SchNoticeListTableViewCell.self)) { (row, model: SchNoticeModel, cell) in
cell.model = model
}.addDisposableTo(disposeBag)
* 刷新狀態(tài)的綁定
```swift
SchNoticeViewModel.shareInstance.refreshStatus.asObservable().bind { (status) in
let objects = self.realm.objects(SchNoticeModel.self).sorted(byKeyPath: "time", ascending: false)
var array = [SchNoticeModel]()
for model in objects {
array.append(model)
}
self.dataSource.value = array
switch status {
case .DropDownSuccess:
self.tableView.mj_header.endRefreshing()
break
case .PullSuccessHasMoreData:
self.tableView.mj_footer.endRefreshing()
break
case .PullSuccessNoMoreData:
self.tableView.mj_footer.endRefreshingWithNoMoreData()
break
default:
break
}
}.addDisposableTo(disposeBag)
- 使用MJRefresh刷新,這里我對controller進(jìn)行了封裝,使用協(xié)議來實現(xiàn)刷新和加載更多
func tableViewRefresh(_ tableView: UITableView) {
//分頁的頁數(shù)
SchNoticeViewModel.shareInstance.page = self.page
//我們自己的數(shù)據(jù)接口的需求
SchNoticeViewModel.shareInstance.t = type
//獲取數(shù)據(jù)
SchNoticeViewModel.shareInstance.getData()
總結(jié):
* 簡單的一個使用,后續(xù)項目再優(yōu)化
上一節(jié):RXSwift的使用 ---登陸示例
下一節(jié):RXSwift使用RXDataSource綁定tableView