// // AppSession.swift // suixinkan // // Created by Codex on 2026/6/18. // import Foundation import Observation /// 登录阶段实体,表示根视图当前应该展示的认证状态。 enum AuthPhase: Equatable { case loggedOut case restoring case loggedIn } @MainActor @Observable /// 登录会话状态中心,保存 token 和当前认证阶段。 final class AppSession { private(set) var phase: AuthPhase = .loggedOut private(set) var token: String? var isLoggedIn: Bool { phase == .loggedIn } /// 将会话切换到恢复中状态,用于冷启动恢复登录态。 func beginRestoring(token: String? = nil) { self.token = token?.trimmingCharacters(in: .whitespacesAndNewlines) phase = .restoring } /// 标记登录成功并保存正式 token。 func markLoggedIn(token: String? = nil) { self.token = token?.trimmingCharacters(in: .whitespacesAndNewlines) phase = .loggedIn } /// 清空 token 并回到未登录状态。 func logout() { token = nil phase = .loggedOut } }