UITextField.rx.text
을 Variable<T>
에 바인드 할 수 있습니다. 이것은 "만들기"화면에있을 때 잘 동작합니다. 그러나 이미 만들어진 모델이 있고 같은 화면에서 편집하고 싶다면 어떻게해야합니까?RxSwift - 동일한 화면을 사용하여 동일한 화면을 사용하여 모델을 편집하고 추가하는 방법
나는 또한 <->
연산자로 표시되는 중온 연산자에 대해 많이 보았습니다. 이 삽입 연산자가 구성되어 있지 않은 경우 양방향 바인딩을 수행하기 위해 항상이 작업을 수행해야합니다. 하나의 새로운 할 일 항목을 만들 때 및 기존의 것을 편집 한 :
let title: Variable<String?>
let description: Variable<String?>
let dueDate: Variable<Date?>
let done: Variable<Bool>
init() {
self.title = Variable<String?>("Initial title")
self.description = Variable<String?>("")
self.dueDate = Variable<Date?>(Date())
self.done = Variable<Bool>(false)
}
init(todo: TodoModel) {
self.title = Variable<String?>(todo.title)
self.description = Variable<String?>(todo.description)
self.dueDate = Variable<Date?>(todo.dueDate)
self.done = Variable<Bool>(todo.done)
}
는 여기에 내가 두 initialisers을 유혹 할 것입니다 내 코드
struct TodoViewModel: CustomDebugStringConvertible {
let title = Variable<String?>("Initial title")
let description = Variable<String?>("")
let dueDate = Variable<Date?>(Date())
let done = Variable<Bool>(false)
var debugDescription: String {
get {
return
"""
// ======
Title: \(self.title.value ?? "Nil")
Description: \(self.description.value ?? "Nil")
Due Date: \(String(describing: self.dueDate.value))
Done: \(self.done.value)
"""
}
}
}
// ViewController
class AddTaskTableViewController: UITableViewController {
@IBOutlet weak var labelTitle: UILabel!
@IBOutlet weak var txtTitle: UITextField!
@IBOutlet weak var txtDescription: UITextField!
@IBOutlet weak var txtDate: UITextField!
@IBOutlet weak var switchDone: UISwitch!
var todo = TodoViewModel()
var disposeBag = DisposeBag()
let dateFormatter = DateFormatter()
override func viewDidLoad() {
super.viewDidLoad()
self.dateFormatter.locale = Locale(identifier: "en-US")
// Configuring reactivity
// Binds the UITextField's text value to my Model
// let _ = self.txtTitle.rx.text.bind(to: self.todo.title).disposed(by: self.disposeBag)
// ⬆⬇ Makes more sense they both being a two-way binding. This way I can edit and add items using the same screen.
// Binds my model's title to the UITextView's text
// let _ = self.todo.title.asObservable().bind(to: self.txtTitle.rx.text)
let _ = self.txtDate.rx.text.map{ strDate in
return self.dateFormatter.date(from: strDate!)
}.bind(to: self.todo.dueDate).disposed(by: self.disposeBag)
let _ = self.txtDescription.rx.text.bind(to: self.todo.description).disposed(by: self.disposeBag)
let _ = self.switchDone.rx.isOn.bind(to: self.todo.done).disposed(by: self.disposeBag)
let _ = self.todo.title.asObservable().bind(to: self.labelTitle.rx.text).disposed(by: self.disposeBag)
}
}