// // 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 = "" } }