// // 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! } }