Swift 4.2
public final class PreferencesService {
private let userDefaults: UserDefaults
init(userDefaults: UserDefaults = .standard) {
self.userDefaults = userDefaults
}
var avatar: UIImage? {
get {
guard let filename = documentsDirectory?.appendingPathComponent(#function, isDirectory: false) else {
return nil
}
return UIImage(contentsOfFile: filename.path)
}
set {
guard let filename = documentsDirectory?.appendingPathComponent(#function, isDirectory: false) else {
return
}
guard let newImage = newValue else {
try? FileManager.default.removeItem(at: filename)
return
}
if let data = newImage.jpegData(compressionQuality: 1.0) {
try? data.write(to: filename)
}
}
}
private var documentsDirectory: URL? {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths.first
}
var coolDown: Bool {
get { return userDefaults.bool(forKey: #function) }
set { userDefaults.set(newValue, forKey: #function) }
}
var lastVisited: Date {
get { return userDefaults.object(forKey: #function) as? Date ?? Date() }
set { userDefaults.set(newValue, forKey: #function) }
}
}
Лучше хранить изображения в каталоге документов.Если необходимо сохранить UserDefaults - вы можете сохранить его как данные.
Использование
PreferencesService().avatar = button.image(for: .normal)
Бонус: Обратите внимание, как хранить просто другие типыBool, Date, String.