RxSwift从一个创建多个Observable

时间:2018-08-04 00:26:03

标签: ios swift mvvm rx-swift

如何共享一个API调用?例如,我有以下Model类。这些属性将绑定到不同的UI组件。我正在ViewController中实现这一点。但是,我认为我不应该将Model暴露给View层。相反,我应该给ViewController两个Observable属性进行绑定。一个用于UITextField,另一个用于UITableView。因此,我应该如何从一个可观察对象创建多个观察对象?

struct CustomerListJSON : Codable {
    var UserCount:Int?
    var TotalReward:Int?
    var CurMonthUserCount:Int?
    var CurMonthTotalReward:Int?
    var CurYearUserCount:Int?
    var CurYearTotalReward:Int?
    var UserList:[CustomerJSON]?
}

let getSummery = self.viewModel.getSummery()

getSummery.flatMap{ [weak self](summery) ->  Observable<[CustomerJSON]> in

//Label datesource
            self?.summeryLabel.text = " \(summery.UserCount ?? 0)\t \(summery.TotalReward ?? 0)\n \(summery.CurMonthUserCount ?? 0)\t \(summery.CurMonthTotalReward ?? 0)\n \(summery.CurYearUserCount ?? 0)\t\(summery.CurYearTotalReward ?? 0)"

            return Observable.of(summery.UserList ?? [])
//Table datasource
        }.bind(to: self.tableView.rx.items(cellIdentifier: "customerCell", cellType: UITableViewCell.self)){ (index, customer, cell) in
            cell.textLabel?.text = "\(customer.UserName ?? "")\t\t\(customer.CreateTime ?? "")"
        }.disposed(by: rx.disposeBag)

1 个答案:

答案 0 :(得分:0)

我有这样的非成熟解决方案。因此,我可以将这两个Observable绑定到ViewController中的UI,以隐藏Model结构。

但是,API调用无法共享。这是另一个问题〜

function test(itemid, price) {
    console.log("hello => " + itemid + ", " + price);
    if (price < 50) {
      setTimeout(() => { test(itemid, price + 10) }, 100);    
    }
}

test(100, 10)