2016-07-04 2 views
2

Я новичок в Swift, и мне нужно сериализовать структуру объекта в строку JSON в моем проекте iOS (iOS> = 8). Итак, я решил использовать библиотеку ObjectMapper (я интегрировал ее с Cocoapod).Как использовать наследование с Swift и ObjectMapper?

Но моя проблема в том, что структура следующая.

ObjectA может иметь список дочерних объектов в виде массива, хранящегося в переменной экземпляра. Объекты, которые могут быть сохранены в массиве экземпляров, могут быть нескольких типов, например ObjectB и ObjectC. Таким образом, в Java с GSON я бы создал интерфейсDD и сделал оба моих класса реализовать его и сделал массив в типах интерфейса ObjectA StoreD, но я не могу понять, как это сделать с объектной моделью Swift, поскольку это приводит к пустым {} Объекты JSON.

В результате JSON должен выглядеть следующим образом.

{"children":[ 
    {"type":"ObjectB", "value1":"foo"}, 
    {"type":"ObjectC", "value1":"bar", "value2":"baz"} 
]} 

и я получаю

{"children":[ 
    {}, 
    {} 
]} 

Обратите внимание, что две записи, которые должны быть сериализовать от Objecta и ObjectC должны иметь различные структуры.

Я пробовал несколько вещей, но каждый раз я застрял в тупике. Я пробовал использовать генераторы, пытался использовать протокол Mappable в качестве моего типа массива, я пробовал классическое наследование классов, но никто не сработал.

Вы знаете, как я могу это достичь?

Обратите внимание, что я знаю, что я мог бы добавить функцию сериализации для каждого объекта и получить строки рекурсивно и объединить их. Но я действительно хочу избежать реализации JSON-сериализатора самостоятельно, поскольку я уже успешно использую, поскольку Alamofire уже используется в проекте). Также внедрение нового сериализатора является склонным к ошибкам, а не чистым способом решения проблемы IMO.

Большое спасибо.

ответ

0

У меня никогда не было решения, но, как обходной путь, я только что сделал свои объекты, создавая словари из всех своих ценностей. Затем я рекурсивно добавляю дочерние объекты dictionnaries как текущие значения словаря. Он добавляет функцию toDict() для каждого объекта, который я принудительно использовал с протоколом. Когда результирующий объект создается только из дерева словарей, сериализация ObjectMapper отлично работает ...