问题描述
我对Swift和Reactive编程还是很陌生,我还停留在VC和VM之间传递数据
因此,我有2个带有自己的VM的VC,他们两个都可以访问将在VM中处理的1个数据模型。我已经对该解决方案进行了一些研究,即在当前页面视图模型中定义目标视图控制器的视图模型。但是问题是,视图模型绑定了一些rx视图组件,因此,在初始化它时,它将需要目标视图控制器的rx视图组件
import UIKit
class MainPageViewController: UIViewController {
var mainPageviewmodel : MainPageviewmodel!
private let disposeBag = disposeBag()
override func viewDidLoad() {
super.viewDidLoad()
self.mainPageviewmodel = MainPageviewmodel(nil)
}
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
let destVC : FilterPageViewController = segue.destination as! FilterPageViewController
destVC.filterPageviewmodel = FilterPageviewmodel(minimumPriceQuery: destVC.minimumPriceTF.rx.text.orEmpty.asDriver(),maximumPriceQuery: destVC.maximumPriceTF.rx.text.orEmpty.asDriver(),wholesaleQuery: destVC.switchToggle.rx.isOn.asDriver(),requestModel: self.mainPageviewmodel.requestparam())
}
}
protocol RequestParameterProtocol{
func requestparam() -> RequestModel
}
class MainPageviewmodel {
private let disposeBag = disposeBag()
private var requestModel : RequestModel!
init(_ model : RequestModel?){
if let params = model {
self.requestModel = params
}else{
self.requestModel = RequestModel()
}
}
}
extension MainPageviewmodel : RequestParameterProtocol{
func requestparam() -> RequestModel {
return self.requestModel
}
}
这是目标视图控制器
class FilterPageViewController: UIViewController {
var filterPageviewmodel : FilterPageviewmodel!
private let disposeBag = disposeBag()
@IBOutlet weak var switchToggle: UISwitch!
@IBOutlet weak var minimumPriceTF: UITextField!
@IBOutlet weak var maximumPriceTF: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// self.filterPageviewmodel = FilterPageviewmodel(minimumPriceQuery: self.minimumPriceTF.rx.text.orEmpty.asDriver(),maximumPriceQuery: self.maximumPriceTF.rx.text.orEmpty.asDriver(),wholesaleQuery: self.switchToggle.rx.isOn.asDriver())
}
}
这是它的视图模型
class FilterPageviewmodel {
private let disposeBag = disposeBag()
private var requestModel : RequestModel
init(minimumPriceQuery: Driver<String>?,maximumPriceQuery : Driver<String>?,wholesaleQuery : Driver<Bool>?,requestModel : RequestModel
) {
self.requestModel = requestModel
}
}
所以这里的问题是我无法从当前的视图控制器定义目标视图模型,因为它需要定义一些rx视图组件的东西
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)