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 concreto

Para 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?

questionAnswers(2)

yourAnswerToTheQuestion