filimo.github.io

import SwiftUI
import Combine



class UserViewModels: BindableObject {
    @Published var password = ""
    @Published var passwordRepeat = ""
    
    var willChange = PassthroughSubject<Void, Never>()
    
    var isValid = false {
        didSet {
            willChange.send()
        }
    }
    
    var validPassword: AnyPublisher<Bool, Never> {
        Publishers.CombineLatest($password, $passwordRepeat)
            .map { password, passwordRepeat in
                return !password.isEmpty && password == passwordRepeat
            }
            .eraseToAnyPublisher()
    }
    
    init() {
        _ = validPassword
            .receive(on: RunLoop.main)
            .assign(to: \.isValid, on: self)
    }
}