Bây giờ mình tưởng tượng 1 func login trong đó email và password phải nhập đúng thì nút Button mới Enabled và label hiển thị Available.
Bây giờ mình kéo vào 1 button và mark Outlet cho nó.
Bây giờ logic code là nếu số kí tự trong input 1 và input 2 phải lớn hơn 3 thì Button mới Enabled và label hiển thị Available.
Button ở đây là output, nó nhận tín hiệu từ VM. Let’s get started
Mình giải thích 1 chút, bây giờ mình không cần trả về String nữa, tại sao? Tại vì một khi bên VC nhận đc signal từ cái observable này nó sẽ xử lý rất nhiều thứ như enabled Button, set chữ Available, set màu cho nó v..v. Do đó mình cần trả về Bool, để nếu nó checked đc là true thì mình sẽ xử lý với tín hiệu đó.
Vẫn cách giải thích như ở bài 3, bây giờ nếu số kí tự input và anotherInput > 3 thì nó sẽ trả về true.
Bây giờ mình xử lý bên VC, mình đã có dữ liệu data trả ngược lại, h mình xử lý với data đó
Mình giải thích cái chỗ Bind 1 chút, có 2 dòng code ở đây:
txtInput.rx.text.map {$0 ?? “”}.bind(to: viewModel.inputText).disposed(by: disposeBag)
viewModel.isChecked.bind(to: btnSignIn.rx.isEnabled).disposed(by: disposeBag)
Nó sẽ dưới dạng A.bind(to: B), tức là connect thằng A đến thằng B, mỗi khi thằng A thay đổi 1 cái gì đó thì thằng B thay đổi theo.
2 đoạn code tiếp theo cũng khá dễ hiểu và tương tự như những phần trước mình đã trình.
Bây giờ run thử, app sẽ work như mong đợi.
Mình muốn note 1 chút, thực ra mình có thể để btnSignIn.isEnabled vào bên trong subscribe. Đó cũng là 1 cách, mình chỉ muốn trình bày thêm 1 cách khác để xử lý data được send ngược lại từ VM.
Như vậy mình đã trình bày xong. Nếu bạn đã đọc đến tận đây, mình thực sự rất cảm kích.