在Swift中变换一个嵌套模型



我在使用Mantle在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'

我尝试将反向块的返回类型更改为PersonPerson!,但我得到相同的错误信息。我已经为此挣扎了很长一段时间,无法在Swift中找到一个工作示例,所以任何帮助都将非常感激。

我知道怎么做了!实际上,我只需要反序列化我的模型就可以从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)
    }
}

这就是它的全部!

最新更新