QFCodable 0.0.2

QFCodable 0.0.2

Girlkiller 维护。



QFCodable 0.0.2

  • 邱峰

QFCodable

  • 类似于系统 Codable 的基础编解码控件。
  • 您可以使用 QFCodable 完全替代系统 Codable。
  • QFCodable 支持自定义行为,允许您为一些失败的情况指定默认值,不仅仅是抛出错误。
  • QFCodable 还支持指定键的不同名称,并为解析失败值或找不到的字段使用指定的默认值。
  • QFCodable 支持将 Data、Dictionary 等类型解码到模型。

当您使用 Bool 类型接收这些值时,QFCodable 会将这些值视为 true 值。您可以通过重写此方法来自定义定义您的值。

static func allowedTrueValues() -> [Any]? {
    [true, 1, "1", "True", "yes"]
}

示例

enum Gender: Int, QFCodable {
    case unknown = -1
    case female = 0
    case male = 1
}

struct TestModel: QFCodable {
    var name: String
    var uid: Int
    var gender: Gender
    var address: String
    
    static func decodingDefaultValue<CodingKeys>(for key: CodingKeys) -> Any? where CodingKeys : CodingKey {
        if key.stringValue == "gender" {
            return Gender.unknown
        }
        return nil
    }
    
    static var modelCustomPropertyMapper: [String : QFCodableKeysMapperValue]? {
        ["address": "detail.address"]
    }
}

let data = [["name": "zhangsan",
             "uid": "123456",
             "gender": "1",
             "detail": ["address": "广州市白云区光明街道12号"]
            ],
            ["name": "lisi",
             "uid": "223567",
             "detail": ["address": "上海市浦东区解放街道1号"]
            ],
            ["name": "wanwu",
             "uid": ""
            ],
            ["name": "zhaoliu"
            ]]
if let model = [TestModel].init(from: data) {
    print(model)
}

用法

pod 'QFCodable'