BetterMappable 1.0.1

BetterMappable 1.0.1

Srikanth KV 维护。



  • Srikanth KV

BetterMappable

Swift 5.1

Better Mappable 通过属性包装器,是一个用 Swift 编写的框架,它可以帮助您轻松地将您的模型对象(类和结构体)转换为 JSON 并从 JSON 转换,这是通过使用 ObjectMapper 实现的。这有助于在您的模型中减少许多样板代码。

基础

提供了 3 个属性包装器供您使用

JSONProperty

使用此属性包装器将任何原始变量(如 IntStringBool 等)映射

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 = false

JSONObject

使用此属性包装器将符合 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'