Armazenar codificáveis em um dicionário Swift
Estou procurando armazenar objetos de modelos em um dicionário e gostaria de serializar todo o dicionário usandoJSONEncoder
em dados e subseqüentemente em uma string e salve-a.
A idéia é usar o Swift 4 fora da caixaEncodable
para garantir que tudo o que eu adiciono ao dicionário seja serializado, o que pode incluir primitivos e objetos personalizados (que eles mesmos estarão em conformidade comEncodable
)
O desafio é que tipo devo declarar o dicionário:
Se eu usar[String: Any]
, não saberá codificarAny
, e se eu tiver que convertê-lo em um tipo concreto real, isso meio que derrota o propósito dos genéricosSe eu usar[String: Encodable]
, ele falhará no tempo de execução, dizendo que o Encodable não está em conformidade, o que é compreensível, pois precisa de um tipo concretoPara resolver isso, pensei em criar um wrapper: ou seja, um protocolo com um tipo associadoou uma estrutura com valor de tipo genérico:
struct Serializable<T: Encodable> {
var value: T?
init(value: T) {
self.value = value
}
}
Mas o problema continua: enquanto declaro o tipo do dicionário mencionado, ainda tenho que fornecer o tipo concreto.
var dictionary: [String: Serializable<X>]
O que deveria estar 'X' aqui, ou qual é a maneira correta de conseguir isso? o que estou perdendo?