Hallo,
ich habe schon wieder ein Problem.
Ich will ein Protocol mit einer Standard-Implementierung zum lesen und speichern von UserDefaults erstellen.
Ich stolpere jedoch über den Type für den JSONDecoder. Die Fehlermeldung lautet: Type 'Self.Type' cannot conform to 'Decodable'
Wo ist mein Fehler?
Alles anzeigen
ich habe schon wieder ein Problem.
Ich will ein Protocol mit einer Standard-Implementierung zum lesen und speichern von UserDefaults erstellen.
Ich stolpere jedoch über den Type für den JSONDecoder. Die Fehlermeldung lautet: Type 'Self.Type' cannot conform to 'Decodable'
Wo ist mein Fehler?
Quellcode
- import Foundation
- import CryptoKit
- public protocol UserDefault: Codable {
- static var key: String { get }
- static func getUserDefault(_ key: String, default: Bool) -> Self.Type
- func setUserDefault(_ key: String)
- }
- /// Extension to implement a default for `UserDefault`.
- extension UserDefault {
- static func getUserDefault() -> Self.Type? {
- if let asSealedBox = UserDefaults.standard.object(forKey: Self.key) as? ChaChaPoly.SealedBox,
- let asString = Crypto.encrypt(asSealedBox),
- let asData = asString.data(using: .utf8) {
- return try! JSONDecoder().decode(Self.Type, from: asData)
- } else {
- return nil
- }
- }
- func setUserDefault(_ key: String) {
- if let asData = try? JSONEncoder().encode(self),
- let asString = String(data: asData, encoding: String.Encoding.utf8),
- let asSealedBox = Crypto.decrypt(asString) {
- UserDefaults.standard.set(asSealedBox, forKey: key)
- }
- }
- }