Swift - RxSwift的使用詳解27(雙向綁定:<->)

? ? ? ? 在之前的文章樣例中,所有的綁定都是單向的。但有時候我們需要實現雙向綁定。比如將控件的某個屬性值與 ViewModel 里的某個 Subject 屬性進行雙向綁定:

  • 這樣當 ViewModel 里的值發(fā)生改變時,可以同步反映到控件上。
  • 而如果對控件值做修改,ViewModel 那邊值同時也會發(fā)生變化。

一、簡單的雙向綁定

1,效果圖

(1)頁面上方是一個文本輸入框,用于填寫用戶名。它與 VM 里的 username 屬性做雙向綁定。

(2)下方的文本標簽會根據用戶名顯示對應的用戶信息。(只有 hangge 顯示管理員,其它都是訪客)

2,樣例代碼

(1)首先定義一個 VM,代碼如下:

import RxSwift
 
struct UserViewModel {
    //用戶名
    let username = Variable("guest")
     
    //用戶信息
    lazy var userinfo = {
        return self.username.asObservable()
            .map{ $0 == "hangge" ? "您是管理員" : "您是普通訪客" }
            .share(replay: 1)
    }()
}

(2)頁面代碼如下(高亮部分為 textfieldVM 的雙向綁定):

import UIKit
import RxSwift
import RxCocoa
 
class ViewController: UIViewController {
 
    @IBOutlet weak var textField: UITextField!
     
    @IBOutlet weak var label: UILabel!
     
    var userVM = UserViewModel()
     
    let disposeBag = DisposeBag()
     
     
    override func viewDidLoad() {
        //將用戶名與textField做雙向綁定
        userVM.username.asObservable().bind(to: textField.rx.text).disposed(by: disposeBag)
        textField.rx.text.orEmpty.bind(to: userVM.username).disposed(by: disposeBag)
         
        //將用戶信息綁定到label上
        userVM.userinfo.bind(to: label.rx.text).disposed(by: disposeBag)
    }
}

二、自定義雙向綁定操作符(operator)

1,RxSwift 自帶的雙向綁定操作符

(1)如果經常進行雙向綁定的話,最好還是自定義一個 operator 方便使用。

(2)好在 RxSwift 項目文件夾中已經有個現成的(Operators.swift),我們將它復制到我們項目中即可使用。當然如我們想自己寫一些其它的雙向綁定 operator 也可以參考它。

2,使用樣例

雙向綁定操作符是:<->。我們修改上面樣例,可以發(fā)現代碼精簡了許多。

import UIKit
import RxSwift
import RxCocoa
 
class ViewController: UIViewController {
 
    @IBOutlet weak var textField: UITextField!
     
    @IBOutlet weak var label: UILabel!
     
    var userVM = UserViewModel()
     
    let disposeBag = DisposeBag()
     
     
    override func viewDidLoad() {
        //將用戶名與textField做雙向綁定
        _ =  self.textField.rx.textInput <->  self.userVM.username
 
        //將用戶信息綁定到label上
        userVM.userinfo.bind(to: label.rx.text).disposed(by: disposeBag)
    }
}

RxSwift使用詳解系列
原文出自:www.hangge.com轉載請保留原文鏈接

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容