Я хочу сделать словарь из кодируемой структуры со свойством реализации по умолчанию.
struct MyStruct: MyStructProtocol {
var value: String
}
Структура реализует протокол.Этот протокол имеет две переменные.Одна переменная имеет реализацию по умолчанию.
protocol MyStructProtocol: Encodable {
var defaultValue: String { get }
var value: String { set get }
}
extension MyStructProtocol {
var defaultValue: String { return "my-default-value" }
}
Для этого я использую это Encodable
расширение от Как я могу использовать Codable Swift для кодирования в словарь? :
extension Encodable {
var asDictionary: [String: Any]? {
guard let data = try? JSONEncoder().encode(self) else { return nil }
return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] }
}
}
Поэтому, когда я создаю экземпляр структуры и "кодирую" ее в словарь:
let myStruct = MyStruct(value: "my-value")
let myStructDictionary = myStruct.asDictionary
, тогда defaultValue
не включается:
["value": "my-value"]
Номне нужно (включая значение по умолчанию):
["defaultValue": "my-default-value", "value": "my-value"]