Mantle - 在 Swift 中转换嵌套模型
Mantle - Transform a Nested Model in Swift
我在使用 Mantle 对 Swift 中的嵌套模型进行反序列化和序列化时遇到了很多麻烦。我相信我已经正确设置了所有内容,但我什至无法克服编译错误。为了给出一些观点,我已经成功地转换了没有嵌套模型对象的 classes。这是我的 class:
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'
我尝试将反向块的 return 类型更改为 Person
和 Person!
,但我收到相同的错误消息。我已经为此苦苦挣扎了很长一段时间,但在 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)
}
}
仅此而已!
我在使用 Mantle 对 Swift 中的嵌套模型进行反序列化和序列化时遇到了很多麻烦。我相信我已经正确设置了所有内容,但我什至无法克服编译错误。为了给出一些观点,我已经成功地转换了没有嵌套模型对象的 classes。这是我的 class:
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'
我尝试将反向块的 return 类型更改为 Person
和 Person!
,但我收到相同的错误消息。我已经为此苦苦挣扎了很长一段时间,但在 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)
}
}
仅此而已!