65 lines
1.6 KiB
Swift
65 lines
1.6 KiB
Swift
//
|
||
// AppStore.swift
|
||
// suixinkan
|
||
//
|
||
|
||
import Foundation
|
||
|
||
/// 本地会话存储,与 Android `AppStoreDataSource` 对齐。
|
||
/// 当前以 Token 是否非空判断登录态。
|
||
final class AppStore {
|
||
|
||
static let shared = AppStore()
|
||
|
||
private enum Key {
|
||
static let token = "key_in_token"
|
||
static let lastLoginUsername = "key_last_login_username"
|
||
static let privacyAgreementAccepted = "key_privacy_agreement_accepted"
|
||
}
|
||
|
||
private let defaults: UserDefaults
|
||
|
||
init(defaults: UserDefaults = .standard) {
|
||
self.defaults = defaults
|
||
}
|
||
|
||
/// 登录 Token。
|
||
var token: String {
|
||
get { defaults.string(forKey: Key.token) ?? "" }
|
||
set { defaults.set(newValue, forKey: Key.token) }
|
||
}
|
||
|
||
/// 上次登录手机号,用于登录页恢复。
|
||
var lastLoginUsername: String? {
|
||
get { defaults.string(forKey: Key.lastLoginUsername) }
|
||
set {
|
||
if let newValue {
|
||
defaults.set(newValue, forKey: Key.lastLoginUsername)
|
||
} else {
|
||
defaults.removeObject(forKey: Key.lastLoginUsername)
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 是否已同意隐私协议。
|
||
var privacyAgreementAccepted: Bool {
|
||
get { defaults.bool(forKey: Key.privacyAgreementAccepted) }
|
||
set { defaults.set(newValue, forKey: Key.privacyAgreementAccepted) }
|
||
}
|
||
|
||
/// Token 非空视为已登录。
|
||
var isLoggedIn: Bool {
|
||
!token.isEmpty
|
||
}
|
||
|
||
/// 保存登录 Token。
|
||
func saveToken(_ token: String) {
|
||
self.token = token
|
||
}
|
||
|
||
/// 清除登录态。
|
||
func logout() {
|
||
token = ""
|
||
}
|
||
}
|