Тело:
Привет, сообщество Swift!
Во время работы над проектом Swift я столкнулся с проблемой, связанной с использованием библиотеки SwiftyUserDefaults. Я относительно новичок в разработке Swift и был бы признателен за рекомендации по устранению этой ошибки.
Контекст:
Я создаю приложение для iOS с использованием Swift и использую SwiftyUserDefaults для управления пользователями. по умолчанию. Я следовал документации и интегрировал SwiftyUserDefaults в свой проект, но столкнулся с ошибкой, связанной с соответствием протоколу.
Проблема:
При попытке использовать SwiftyUserDefaults для определения значения по умолчанию значения для определенных типов (например, Date, String, Int и т. д.), я получаю следующие сообщения об ошибках:
"Тип "Self" не соответствует протоколу "Decodable" "
"'DefaultKeyedArchiverBridge' требует, чтобы 'Self' соответствовало 'Decodable'"
Что я пробовал:
Я просмотрел документацию Swift по протоколам и Codable, но я все еще пытаюсь понять, как решить эту проблему. Я также искал в Интернете подобные проблемы, но не нашел решения, применимого к моему конкретному сценарию.
Фрагменты кода:
Вот отрывок из моего расширения SwiftyUserDefaults, где возникает ошибка:
Код: Выделить всё
import Foundation
extension DefaultsSerializable {
public static var _defaultsArray: DefaultsArrayBridge { return DefaultsArrayBridge() }
}
extension Date: DefaultsSerializable {
public static var _defaults: DefaultsObjectBridge { return DefaultsObjectBridge() }
}
extension String: DefaultsSerializable {
public static var _defaults: DefaultsStringBridge { return DefaultsStringBridge() }
}
extension Int: DefaultsSerializable {
public static var _defaults: DefaultsIntBridge { return DefaultsIntBridge() }
}
extension Double: DefaultsSerializable {
public static var _defaults: DefaultsDoubleBridge { return DefaultsDoubleBridge() }
}
extension Bool: DefaultsSerializable {
public static var _defaults: DefaultsBoolBridge { return DefaultsBoolBridge() }
}
extension Data: DefaultsSerializable {
public static var _defaults: DefaultsDataBridge { return DefaultsDataBridge() }
}
extension URL: DefaultsSerializable {
#if os(Linux)
public static var _defaults: DefaultsKeyedArchiverBridge { return DefaultsKeyedArchiverBridge() }
#else
public static var _defaults: DefaultsUrlBridge { return DefaultsUrlBridge() }
#endif
public static var _defaultsArray: DefaultsKeyedArchiverBridge { return DefaultsKeyedArchiverBridge() }
}
extension DefaultsSerializable where Self: Codable {
public static var _defaults: DefaultsCodableBridge { return DefaultsCodableBridge() }
public static var _defaultsArray: DefaultsCodableBridge { return DefaultsCodableBridge() }
}
extension DefaultsSerializable where Self: RawRepresentable {
public static var _defaults: DefaultsRawRepresentableBridge { return DefaultsRawRepresentableBridge() }
public static var _defaultsArray: DefaultsRawRepresentableArrayBridge { return DefaultsRawRepresentableArrayBridge() }
}
extension DefaultsSerializable where Self: NSCoding {
public static var _defaults: DefaultsKeyedArchiverBridge { return DefaultsKeyedArchiverBridge() }
public static var _defaultsArray: DefaultsKeyedArchiverBridge { return DefaultsKeyedArchiverBridge() }
}
extension Dictionary: DefaultsSerializable where Key == String {
public typealias T = [Key: Value]
public typealias Bridge = DefaultsObjectBridge
public typealias ArrayBridge = DefaultsArrayBridge
public static var _defaults: Bridge { return Bridge() }
public static var _defaultsArray: ArrayBridge { return ArrayBridge() }
}
extension Array: DefaultsSerializable where Element: DefaultsSerializable {
public typealias T = [Element.T]
public typealias Bridge = Element.ArrayBridge
public typealias ArrayBridge = DefaultsObjectBridge
public static var _defaults: Bridge {
return Element._defaultsArray
}
public static var _defaultsArray: ArrayBridge {
fatalError("Multidimensional arrays are not supported yet")
}
}
extension Optional: DefaultsSerializable where Wrapped: DefaultsSerializable {
public typealias Bridge = DefaultsOptionalBridge
public typealias ArrayBridge = DefaultsOptionalBridge
public static var _defaults: DefaultsOptionalBridge { return DefaultsOptionalBridge(bridge: Wrapped._defaults) }
public static var _defaultsArray: DefaultsOptionalBridge { return DefaultsOptionalBridge(bridge: Wrapped._defaultsArray) }
}
Может кто-нибудь объяснить, почему я сталкиваюсь с этими ошибками и как их устранить? Кроме того, я открыт для альтернативных предложений по управлению пользовательскими настройками по умолчанию, если SwiftyUserDefaults не является лучшим решением для моего варианта использования.
Теги: Swift, ios, Swiftyuserdefaults, декодируемый, соответствие протоколу
Заранее благодарим вас за любую помощь или информацию, которую вы можете предоставить!
Подробнее здесь: https://stackoverflow.com/questions/781 ... yedarchive