我在使用 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)
    }
}

这里的所有都是它的!

关于ios - Mantle - 在 Swift 中转换嵌套模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31661354/

10-12 00:18
查看更多