BetterMappable
Better Mappable 通过属性包装器,是一个用 Swift 编写的框架,它可以帮助您轻松地将您的模型对象(类和结构体)转换为 JSON 并从 JSON 转换,这是通过使用 ObjectMapper 实现的。这有助于在您的模型中减少许多样板代码。
基础
提供了 3 个属性包装器供您使用
JSONProperty
使用此属性包装器将任何原始变量(如 Int、String、Bool 等)映射
struct User: Mappable {
@JSONProperty var name: String?
@JSONProperty var age: Int?
@JSONProperty var onPhonePe: Bool?
init?(map: Map) {
}
}就是这样。是的!您看对了。您根本不需要实现 func mapping(map: Map)。我们将自动获取变量名称并从 JSON 中分配正确的值。如果您的变量名称与 JSON 中的 key 不同,您可以在 JSONProperty 中提供它作为参数。
@JSONProperty(key: "on_phonepe")
var onPhonePe: Bool?您可以为变量提供默认值,就像您通常使用 ObjectMapper 那样。
@JSONProperty
var age: Int = 0
@JSONProperty(key: "on_phonepe")
var onPhonePe: Bool = falseJSONObject
使用此属性包装器将符合 Mappable 协议的自定义类/结构体映射
struct Student: Mappable {
@JSONObject var address: Address?
@JSONProperty var firstName: String?
@JSONProperty var lastName: String?
init?(map: Map) {
}
}
struct Address: Mappable {
@JSONProperty var street: String?
@JSONProperty var building: String?
@JSONProperty var city: String?
@JSONProperty var state: String?
init?(map: Map) {
}
}与 JSONProperty 示例类似,如果你的变量名与JSON中的 key 不同,你可以将其作为参数传递给 JSONObject。
@JSONObject(key: "student_address")
var address: Address?JSONPropertyWithTransform
使用此属性包装器来映射具有转换的变量。
struct Organization: Mappable {
enum Sector: String {
case `private` = "PRIVATE"
case `public` = "PUBLIC"
}
@JSONPropertyWithTransform(transformer: DateTransform())
var startDate: Date?
@JSONPropertyWithTransform(transformer: EnumTransform<Sector>())
var sector: Sector?
@JSONProperty var name: String?
init?(map: Map) {
}
}这个是否与 StaticMappable 一起工作?
是的,可以。
class Vehicle {
enum VehicleType: String {
case car = "CAR"
case bicycle = "BICYCLE"
}
@JSONProperty var numberOfWheels: Int?
}
extension Vehicle: StaticMappable {
static func objectForMapping(map: Map) -> BaseMappable? {
if let rawType = map.JSON["type"] as? String,
let type = VehicleType(rawValue: rawType) {
switch type {
case .car:
return Car()
case .bicycle:
return Bicycle()
}
}
return nil
}
}
class Car: Vehicle {
@JSONProperty var hasBonet: Bool?
}
class Bicycle: Vehicle {
@JSONProperty var modelName: String?
}子类
class Base: Mappable {
@JSONProperty var base: String?
required init?(map: Map) {
}
}
class Subclass: Base {
@JSONProperty var sub: String?
required init?(map: Map) {
super.init(map: map)
}
}安装
BetterMappable 可以通过添加以下行到你的 Podfile 来添加到你的项目中使用 CocoaPods
pod 'BetterMappable'