AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射
Posted
技术标签:
【中文标题】AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射【英文标题】:Does AlamofireObjectMapper / ObjectMapper support struct type mappingAlamofireObjectMapper / ObjectMapper 是否支持结构类型映射 【发布时间】:2016-09-09 08:11:03 【问题描述】:我正在使用AlamofireObjectMapper 来解析对我的对象的 json 响应。 AlamofireObjectMapper 是ObjectMapper 的扩展。
根据他们的文档,我的模型类必须符合Mappable
协议。例如:
class Forecast: Mappable
var day: String?
var temperature: Int?
var conditions: String?
required init?(_ map: Map)
func mapping(map: Map)
day <- map["day"]
temperature <- map["temperature"]
conditions <- map["conditions"]
为了符合 Mappable protocl,我的模型类必须为每个字段实现所需的初始化程序和映射函数。有道理。
BUT,它是如何支持struct
类型的?比如我有一个Coordinate
结构,我尝试符合Mappable
协议:
struct Coordinate: Mappable
var xPos: Int
var yPos: Int
// ERROR: 'required' initializer in non-class type
required init?(_ map: Map)
func mapping(map: Map)
xPos <- map["xPos"]
yPos <- map["yPos"]
由于上面显示的错误,我无法使我的 Coordinate
符合 Mappable。
(我认为经常使用struct
来获取坐标数据而不是使用class
)
我的问题:
Q1. AlamofireObjectMapper 或 ObjectMapper 库是否支持struct
类型?那么如何使用它们解析对struct
类型对象的json响应呢?
Q2. 如果这些库不支持将 json 响应解析为结构类型对象。在 ios 中使用 Swift2 的方法是什么?
【问题讨论】:
【参考方案1】:BaseMappable 协议是这样定义的,所以你应该声明每个方法都符合Mappable
。
/// BaseMappable should not be implemented directly. Mappable or StaticMappable should be used instead
public protocol BaseMappable
/// This function is where all variable mappings should occur. It is executed by Mapper during the mapping (serialization and deserialization) process.
mutating func mapping(map: Map)
可映射协议是这样定义的
public protocol Mappable: BaseMappable
/// This function can be used to validate JSON prior to mapping. Return nil to cancel mapping at this point
init?(map: Map)
你必须相应地实现它:
struct Coordinate: Mappable
var xPos: Int?
var yPos: Int?
init?(_ map: Map)
mutating func mapping(map: Map)
xPos <- map["xPos"]
yPos <- map["yPos"]
或
struct Coordinate: Mappable
var xPos: Int
var yPos: Int
init?(_ map: Map)
mutating func mapping(map: Map)
xPos <- map["xPos"] ?? 0
yPos <- map["yPos"] ?? 0
构造函数不能被标记为必需,因为结构不能被继承。映射函数必须被标记为变异,因为改变结构中存储的数据......
【讨论】:
以上是关于AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射的主要内容,如果未能解决你的问题,请参考以下文章
如何实例化映射类? (迅速 - alamofireObjectMapper)
使用 AlamofireObjectMapper 创建 func 返回一个对象
AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射
AlamofireObjectMapper,嵌套的 JSON 结构在序列化时总是 nil
Alamofire / AlamofireObjectMapper - 如何从 responseObject 打印错误 json?