2015-07-27 2 views
4

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

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, поэтому любая помощь была бы высоко оценена.

ответ

4

Я узнал, как это сделать! Мне просто нужно было де-сериализовать мои модели, чтобы прочитать их из 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) 
    } 
} 

Это все есть на него!