Мантия - Преобразование вложенной модели в Swift

У меня много проблем с десериализацией и сериализацией вложенной модели в Swift с использованием Mantle. Я верю, что все настроено правильно, но я даже не могу обойти ошибки компиляции. Чтобы дать некоторую перспективу, я успешно преобразовал классы, у которых нет вложенных объектов модели. Вот мой класс:

class TheClass : MTLModel, MTLJSONSerializing
{
    var person:Person?

    static func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
    {
        return ["person" : "person"]
    }

    static func personJSONTransformer() -> NSValueTransformer!
    {
        return MTLValueTransformer.reversibleTransformerWithForwardBlock(
        { (person:[NSObject : AnyObject]!) -> AnyObject! in
            do
            {
                return MTLJSONAdapter.modelOfClass(Person.self, fromJSONDictionary: person)
            }
            catch
            {
                return Person()
            }
        },
        reverseBlock:
        { (person:Person) -> AnyObject! in
            return MTLJSONAdapter.JSONDictionaryFromModel(person)
        })
    }
}

Этот код не будет компилироваться, и я не могу его скомпилировать. Вот сообщение об ошибке, которое я получаю:

Cannot convert return expression of type 'AnyObject!' to expected return type 'Person'

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

1 ответ

Решение

Я узнал, как это сделать! На самом деле мне нужно всего лишь десериализовать мои модели, чтобы прочитать их из JSON. Вот как я это сделал:

class TheClass : MTLModel, MTLJSONSerializing
{
    var person:Person?

    static func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
    {
        return ["person" : "person"]
    }

    static func personJSONTransformer() -> NSValueTransformer!
    {
        return MTLJSONAdapter.dictionaryTransformerWithModelClass(Person.self)
    }
}

И если у вас есть массив вложенных моделей:

class TheClass : MTLModel, MTLJSONSerializing
{
    var person:[Person]?

    static func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
    {
        return ["person" : "person"]
    }

    static func personJSONTransformer() -> NSValueTransformer!
    {
        return MTLJSONAdapter.arrayTransformerWithModelClass(Person)
    }
}

Это все, что нужно сделать!

Другие вопросы по тегам