RxCocoa 랑 같이 사용
//
// ViewController.swift
// RxSwiftIn4Hours
//
// Created by iamchiwon on 21/12/2018.
// Copyright © 2018 n.code. All rights reserved.
//
import RxCocoa
import RxSwift
import UIKit
class ViewController: UIViewController {
var disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
bindUI()
}
// MARK: - IBOutler
@IBOutlet var idField: UITextField!
@IBOutlet var pwField: UITextField!
@IBOutlet var loginButton: UIButton!
@IBOutlet var idValidView: UIView!
@IBOutlet var pwValidView: UIView!
// MARK: - Bind UI
private func bindUI() {
// id input +--> check valid --> bullet
// |
// +--> button enable
// |
// pw input +--> check valid --> bullet
idField.rx.text.orEmpty
//.filter {$0 != nil} or empty 없으면 있어야함
//.map { $0! } 얘도
.map {checkEmailValid}
.subscibe(onNext: { b in
self.idValidView.isHidden = b
})
.diposed(by : disposeBag)
pwField.rx.text.orEmpty
//.filter {$0 != nil} or empty 없으면 있어야함
//.map { $0! } 얘도
.map {checkPasswordValid}
.subscibe(onNext: { b in
self.pwValidView.isHidden = b
})
.diposed(by : disposeBag)
Observable.combineLatest(source1:idField.rx.text.orEmpty.map {checkEmailValid}
, source2:pwField.rx.text.orEmpty.map {checkPasswordValid},
resultSelector: {s1 , s2 in s1 && s2})
.subscirbe(onNext: { b in
self.loginButton.isEnabled = b
})
.diposed(by : disposeBag)
}
// MARK: - Logic
private func checkEmailValid(_ email: String) -> Bool {
return email.contains("@") && email.contains(".")
}
private func checkPasswordValid(_ password: String) -> Bool {
return password.count > 5
}
}
//
// ViewController.swift
// RxSwiftIn4Hours
//
// Created by iamchiwon on 21/12/2018.
// Copyright © 2018 n.code. All rights reserved.
//
import RxCocoa
import RxSwift
import UIKit
class ViewController: UIViewController {
var disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
bindUI()
}
// MARK: - IBOutler
@IBOutlet var idField: UITextField!
@IBOutlet var pwField: UITextField!
@IBOutlet var loginButton: UIButton!
@IBOutlet var idValidView: UIView!
@IBOutlet var pwValidView: UIView!
// MARK: - Bind UI
private func bindUI() {
// id input +--> check valid --> bullet
// |
// +--> button enable
// |
// pw input +--> check valid --> bullet
// input : 아이디 입력, 비번 입력
let idInputOb : Observable<String> = idField.rx.text.orEmpty.asObservable()
let pwInputOb : Observable<String> = pwField.rx.text.orEmpty.asObservable()
let idValidOb = idInputOb.map(checkEmailValid)
let pwValidOb = pwInputOb.map(checkPasswordValid)
// output : 불릿,로그인 버튼 인에이블
idValidOb.subscibe(onNext: { b in
self.idValidView.isHidden = b
})
.diposed(by : disposeBag)
pwValidOb..subscibe(onNext: { b in
self.pwValidView.isHidden = b
})
.diposed(by : disposeBag)
Observable.combineLatest(source1: idValidOb
, source2: pwValidOb ,
resultSelector: { $0 && $1})
.subscirbe(onNext: { b in
self.loginButton.isEnabled = b
})
.diposed(by : disposeBag)
}
// MARK: - Logic
private func checkEmailValid(_ email: String) -> Bool {
return email.contains("@") && email.contains(".")
}
private func checkPasswordValid(_ password: String) -> Bool {
return password.count > 5
}
}