¿Cómo puedo implementar la decodificación polimórfica de datos JSON en Swift 4?

Estoy tratando de representar una vista de los datos devueltos desde un punto final API. Mi JSON se ve (aproximadamente) así:

{
  "sections": [
    {
      "title": "Featured",
      "section_layout_type": "featured_panels",
      "section_items": [
        {
          "item_type": "foo",
          "id": 3,
          "title": "Bisbee1",
          "audio_url": "http://example.com/foo1.mp3",
          "feature_image_url" : "http://example.com/feature1.jpg"
        },
        {
          "item_type": "bar",
          "id": 4,
          "title": "Mortar8",
          "video_url": "http://example.com/video.mp4",
          "director" : "John Smith",
          "feature_image_url" : "http://example.com/feature2.jpg"
        }
      ]
    }    
  ]
}

Tengo un objeto que representa cómo diseñar una vista en mi interfaz de usuario. Se parece a esto:

public struct ViewLayoutSection : Codable {
    var title: String = ""
    var sectionLayoutType: String
    var sectionItems: [ViewLayoutSectionItemable] = []
}

ViewLayoutSectionItemable es un protocolo que incluye, entre otras cosas, un título y una URL a una imagen para usar en el diseño.

sin embargo, elsectionItems La matriz está compuesta de diferentes tipos. Lo que me gustaría hacer es crear una instancia de cada elemento de sección como una instancia de su propia clase.

¿Cómo configuro elinit(from decoder: Decoder) método para elViewLayoutSection para dejarme iterar sobre los elementos en esa matriz JSON y crear una instancia de la clase adecuada en cada caso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta