添加登录流程、会话路由和对齐参考 UI 的主 Tab 框架
This commit is contained in:
61
suixinkan/UI/Login/LoginViewModel.swift
Normal file
61
suixinkan/UI/Login/LoginViewModel.swift
Normal file
@ -0,0 +1,61 @@
|
||||
//
|
||||
// LoginViewModel.swift
|
||||
// suixinkan
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// 登录页 ViewModel,UI 状态与 Android `LoginViewModel` 对齐。
|
||||
final class LoginViewModel {
|
||||
|
||||
private(set) var account = ""
|
||||
private(set) var password = ""
|
||||
private(set) var isPrivacyChecked = false
|
||||
private(set) var enableRegister = false
|
||||
|
||||
var isLoginEnabled: Bool {
|
||||
!account.isEmpty && !password.isEmpty
|
||||
}
|
||||
|
||||
var onStateChange: (() -> Void)?
|
||||
|
||||
func updateAccount(_ value: String) {
|
||||
account = value
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
func updatePassword(_ value: String) {
|
||||
password = value
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
func togglePrivacyChecked() {
|
||||
isPrivacyChecked.toggle()
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
func updateEnableRegister(_ enabled: Bool) {
|
||||
enableRegister = enabled
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
func login() {
|
||||
guard isPrivacyChecked else {
|
||||
onShowMessage?("请先阅读并同意用户协议与隐私政策")
|
||||
return
|
||||
}
|
||||
guard isLoginEnabled else { return }
|
||||
onLogin?()
|
||||
}
|
||||
|
||||
var onShowMessage: ((String) -> Void)?
|
||||
var onLogin: (() -> Void)?
|
||||
var onLoginByCode: (() -> Void)?
|
||||
var onRegister: (() -> Void)?
|
||||
var onUserAgreement: (() -> Void)?
|
||||
var onPrivacyPolicy: (() -> Void)?
|
||||
|
||||
private func notifyStateChange() {
|
||||
onStateChange?()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user