嗨!今天輕鬆一點,介紹一個在RxSwiftUtilities下的功能(或稱作擴充?),找不到合適的詞,不過很有機會用到,就是RxSwiftUtilities/TwoWayBinding.swift。
試想一下,現在要做一個表單,有一個給使用者輸入的textField
,跟存放TextField的資料的relay
今天是新增的表單,所以要把textField
的資料帶入relay
,你會這樣寫
let relay = BehaviorRelay<String?>(value: "")
textfield.rx.text.bind(to: viewModel.relay).disposed(by: disposeBag)
那如果今天是把一預設值帶入textField
,你會這樣寫
let relay = BehaviorRelay<String?>(value: "Default value")
textField.rx.text.bind(to: relay).disposed(by: disposeBag)
又或是說,今天表單是建立在UITableView的Cell上,Cell會在滑動時進行reuse,所以,你需要同時符合上面兩個狀況,帶入預設值,使用者輸入時儲存在relay,在滑開時進行reuse會被清除,再次滑動到該Cell的時候再把值帶入,所以這方向會是雙向的。
使用TwoWayBinding後,可以很輕易地達到雙向綁定的效果
let relay = BehaviorRelay<String?>(value: "Default value")
(textfield.rx.text <-> viewModel.relay).disposed(by: disposeBag)
同樣在UISwitch也能有一樣效果
let relay = BehaviorRelay<Bool>(value: true)
(uiswitch.rx.isOn <-> viewModel.relay).disposed(by: disposeBag)
自己常用到的情境是在UITableViewCell+UITextField的時候,覺得很好用,那就這樣,掰掰