87 lines
3.1 KiB
Swift
87 lines
3.1 KiB
Swift
//
|
||
// PreferenceManager.swift
|
||
// Funny_sounds
|
||
//
|
||
// Created by 忆海16 on 2024/8/27.
|
||
//
|
||
|
||
import Foundation
|
||
import UIKit
|
||
|
||
class PreferenceManager {
|
||
static let shared = PreferenceManager()
|
||
private let preferencesKey = "userPreferences" // 偏好设置的键值
|
||
|
||
private init() {}
|
||
// MARK: - 保存一个新的偏好设置
|
||
func savePreference(_ preference: UserPreference) {
|
||
var preferences = loadPreferences() ?? [UserPreference]()
|
||
preferences.append(preference) // 将新偏好设置添加到数组中
|
||
savePreferences(preferences) // 保存更新后的数组
|
||
}
|
||
|
||
// MARK: - 保存所有偏好设置
|
||
private func savePreferences(_ preferences: [UserPreference]) {
|
||
if let encodedPreferences = try? JSONEncoder().encode(preferences) {
|
||
UserDefaults.standard.set(encodedPreferences, forKey: preferencesKey) // 将偏好设置数组保存到UserDefaults中
|
||
}
|
||
}
|
||
|
||
// MARK: - 加载所有偏好设置
|
||
func loadPreferences() -> [UserPreference]? {
|
||
guard let savedData = UserDefaults.standard.data(forKey: preferencesKey),
|
||
let preferences = try? JSONDecoder().decode([UserPreference].self, from: savedData) else {
|
||
return nil // 如果未找到数据或解码失败,返回nil
|
||
}
|
||
return preferences // 返回偏好设置数组
|
||
}
|
||
|
||
// MARK: - 清除所有偏好设置
|
||
func clearPreferences() {
|
||
UserDefaults.standard.removeObject(forKey: preferencesKey) // 从UserDefaults中移除偏好设置
|
||
}
|
||
|
||
// MARK: - 保存音频
|
||
func saveAudio(data: Data, fileName: String) -> Bool {
|
||
let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
|
||
do {
|
||
try data.write(to: fileURL) // 将音频数据写入文件
|
||
return true
|
||
} catch {
|
||
print("保存音频失败: \(error.localizedDescription)")
|
||
return false
|
||
}
|
||
}
|
||
|
||
// MARK: - 保存图片
|
||
func saveImage(image: UIImage, fileName: String) -> Bool {
|
||
guard let data = image.pngData() else { return false }
|
||
let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
|
||
do {
|
||
try data.write(to: fileURL) // 将图片数据写入文件
|
||
return true
|
||
} catch {
|
||
print("保存图片失败: \(error.localizedDescription)")
|
||
return false
|
||
}
|
||
}
|
||
|
||
// MARK: - 加载音频
|
||
func loadAudio(fileName: String) -> Data? {
|
||
let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
|
||
return try? Data(contentsOf: fileURL) // 从文件中加载音频数据
|
||
}
|
||
|
||
// MARK: - 加载图片
|
||
func loadImage(fileName: String) -> UIImage? {
|
||
let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
|
||
guard let data = try? Data(contentsOf: fileURL) else { return nil }
|
||
return UIImage(data: data) // 从文件中加载图片数据
|
||
}
|
||
|
||
// MARK: - 获取文档目录路径
|
||
private func getDocumentsDirectory() -> URL {
|
||
return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
|
||
}
|
||
}
|