144 lines
4.3 KiB
Swift
144 lines
4.3 KiB
Swift
//
|
||
// AccountManager.swift
|
||
// wallpaper_project
|
||
|
||
|
||
import Foundation
|
||
import UIKit
|
||
|
||
// 定义一个结构体,用于表示账户信息
|
||
struct Account:Decodable,Encodable {
|
||
let username: String
|
||
let password: String
|
||
}
|
||
|
||
|
||
class AccountManager {
|
||
static let accountsKey = "Accounts"
|
||
static let currentAccountKey = "CurrentAccount"
|
||
|
||
static func getAccounts() -> [Account] {
|
||
guard let data = UserDefaults.standard.data(forKey: accountsKey) else {
|
||
return []
|
||
}
|
||
|
||
do {
|
||
let accounts = try JSONDecoder().decode([Account].self, from: data)
|
||
return accounts
|
||
} catch {
|
||
print("Error decoding accounts: \(error)")
|
||
return []
|
||
}
|
||
}
|
||
|
||
static func saveAccount(account: Account) {
|
||
var accounts = getAccounts()
|
||
accounts.append(account)
|
||
|
||
do {
|
||
let data = try JSONEncoder().encode(accounts)
|
||
UserDefaults.standard.set(data, forKey: accountsKey)
|
||
} catch {
|
||
print("Error encoding accounts: \(error)")
|
||
}
|
||
}
|
||
|
||
static func deleteAccount(at index: Int) {
|
||
var accounts = getAccounts()
|
||
accounts.remove(at: index)
|
||
|
||
do {
|
||
let data = try JSONEncoder().encode(accounts)
|
||
UserDefaults.standard.set(data, forKey: accountsKey)
|
||
} catch {
|
||
print("Error encoding accounts: \(error)")
|
||
}
|
||
}
|
||
|
||
static func updateAccount(at index: Int, with newAccount: Account) {
|
||
var accounts = getAccounts()
|
||
accounts[index] = newAccount
|
||
|
||
do {
|
||
let data = try JSONEncoder().encode(accounts)
|
||
UserDefaults.standard.set(data, forKey: accountsKey)
|
||
} catch {
|
||
print("Error encoding accounts: \(error)")
|
||
}
|
||
}
|
||
|
||
static func createDefaultAccountIfNeeded() {
|
||
if getAccounts().isEmpty {
|
||
let defaultAccount = Account(username: "13730645123", password: "123456")
|
||
saveAccount(account: defaultAccount)
|
||
}
|
||
}
|
||
static func validateAccount(username: String, password: String) -> Bool {
|
||
let accounts = getAccounts()
|
||
for account in accounts {
|
||
if account.username == username && account.password == password {
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
static var currentAccount: Account? {
|
||
get {
|
||
guard let data = UserDefaults.standard.data(forKey: currentAccountKey) else {
|
||
return nil
|
||
}
|
||
do {
|
||
let account = try JSONDecoder().decode(Account.self, from: data)
|
||
return account
|
||
} catch {
|
||
print("Error decoding current account: \(error)")
|
||
return nil
|
||
}
|
||
}
|
||
set {
|
||
guard let newValue = newValue else {
|
||
UserDefaults.standard.removeObject(forKey: currentAccountKey)
|
||
return
|
||
}
|
||
do {
|
||
let data = try JSONEncoder().encode(newValue)
|
||
UserDefaults.standard.set(data, forKey: currentAccountKey)
|
||
} catch {
|
||
print("Error encoding current account: \(error)")
|
||
}
|
||
}
|
||
}
|
||
|
||
static func login(username: String, password: String) -> Bool {
|
||
let accounts = getAccounts()
|
||
for account in accounts {
|
||
if account.username == username && account.password == password {
|
||
currentAccount = account
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
static func logout() {
|
||
UserDefaults.standard.removeObject(forKey: currentAccountKey)
|
||
}
|
||
|
||
static func logoutSpecificAccount(username: String) {
|
||
var accounts = getAccounts()
|
||
if let index = accounts.firstIndex(where: { $0.username == username }) {
|
||
accounts.remove(at: index)
|
||
do {
|
||
let data = try JSONEncoder().encode(accounts)
|
||
UserDefaults.standard.set(data, forKey: accountsKey)
|
||
} catch {
|
||
print("Error encoding accounts: \(error)")
|
||
}
|
||
} else {
|
||
print("Account not found")
|
||
}
|
||
}
|
||
|
||
}
|