Мантия - Преобразование вложенной модели в 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)
}
}
Это все, что нужно сделать!