iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0
Mobile Development

RxSwift / 30天探索之旅系列 第 26

第 26 天 - Two Way Binding

  • 分享至 

  • xImage
  •  

嗨!今天輕鬆一點,介紹一個在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

使用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的時候,覺得很好用,那就這樣,掰掰


上一篇
第 25 天 - DelegateProxy
下一篇
第 27 天 - Driver
系列文
RxSwift / 30天探索之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言