gpt4 book ai didi

ios - AlamofireObjectMapper/ObjectMapper是否支持struct类型映射

转载 作者:IT王子 更新时间:2023-10-29 05:36:51 24 4
gpt4 key购买 nike

我正在使用 AlamofireObjectMapper解析对我的对象的 json 响应。 AlamofireObjectMapper 是 ObjectMapper 的扩展.

根据他们的文档,我的模型类必须符合 Mappable 协议(protocol)。例如:

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 协议(protocol),我的模型类必须为每个字段实现所需的初始化程序和映射函数。这是有道理的。

但是,它是如何支持struct类型的?例如,我有一个Coordinate结构,我尝试符合可映射协议(protocol):

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 这样做的方法是什么?

最佳答案

BaseMappable 协议(protocol)是这样定义的,因此您应该声明每个方法以符合 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)
}

可映射协议(protocol)是这样定义的

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
}
}

构造函数不能标记为必需,因为结构不能被继承。映射函数必须标记为变异,因为变异结构中存储的数据...

关于ios - AlamofireObjectMapper/ObjectMapper是否支持struct类型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37204756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com