【发布时间】:2019-03-28 19:39:13
【问题描述】:
我正在为我面临的问题寻找解决方案。我有 TableView,它有多个单元格,每个单元格都有一个 UISwitch 并且该开关的状态(开/关)设置如下:
viewModel.permissions
.drive(tblMessageTypes.rx.items(cellIdentifier: "PermissionCellIdentifier", cellType: PermissionTableViewCell.self)) { [switchSubject] _, item, cell in
cell.backgroundColor = .clear
cell.lblTitle.text = item.permissionTitle
cell.lblDetail.text = item.permissionDescirption
cell.selectionStyle = .none
cell.switchPermission.isOn = item.permissionValue
cell.switchPermission.isEnabled = !item.isPermissionReadOnly
cell.switchPermission.rx.controlEvent(.valueChanged)
.withLatestFrom(cell.switchPermission.rx.value)
.map { isOn in
var newPermission = item
newPermission.permissionValue = isOn
return newPermission
}
.bind(to: switchSubject)
.disposed(by: cell.disposeBag)
}
.disposed(by: disposeBag)
因此,当切换 Switch 时,我将通过更新 Switch 状态传递当前单元格值,并基于此在我的 VM 中调用 api,如下所示:
let serverReponse = inputs.switchToggle
.map { permission in
let dicto = permission.toDictionary()
let parameters = ["permissions": [dicto]]
return parameters
} .flatMapLatest { parameters in
userService.updateUserPermission(parameters: parameters)
.trackActivity(inputs.indicator)
.materialize()
}
.share()
现在我遇到的问题是,如果 api 由于任何原因失败,UISwitch 应该如何回退到初始状态,即如果它是 Off 并且用户将其切换到 On 状态并且 Api 失败,它应该回退到 Off 状态。
【问题讨论】:
标签: ios swift rx-swift reactive rx-cocoa