SwiftyJSONMappable 1.0.3

SwiftyJSONMappable 1.0.3

测试已测试
Lang语言 SwiftSwift
许可协议 MIT
Released最新发布2017年6月
SwiftSwift版本3.0
SPM支持SPM

ApterKing 维护。



  • ApterKing

SwiftyJSONMappable

封装了 SwiftyJSON,它实现了

  • JSON→Model:将 JsonString 或 Dictionary/Array 等转换为模型,更多信息请查看 SwiftyJSON

  • Model→JSON:将实现协议 JSONConvertibleMappable 的模型转换为 JSON

中文文档

安装

您可以使用 Cocoapod 工具将其导入到您的项目

pod 'SwiftyJSONMappable'

:与 Moya 一起使用

pod 'SwiftyJSONMappable/Moya'

:与 RxSwift 一起使用

pod 'SwiftyJSONMappable/RxSwift'

用法

模型定义

class HttpBin: JSONMappable {
    var args: [String: Any]
    var headers: HttpBinHeaders
    var origin: String
    var url: String

    required init(json: JSON) {
        args = json["args"].dictionaryValue
        headers = HttpBinHeaders(json: json["headers"])
        origin = json["origin"].stringValue
        url = json["url"].stringValue
    }
}

转换为 JSON/JSONString

let httpBin = ...

let JSON = httpBin.mapJSON()    // transform to SwiftyJSON
let JSONString = httpBin.mapString()   // transform to json String

您将得到如下结果

{
  "headers" : {
    "acceptEncoding" : "gzip;q=1.0, compress;q=0.5",
    "acceptLanguage" : "en;q=1.0",
    "connection" : "close",
    "accept" : "*\/*",
    "host" : "httpbin.org"
  },
  "origin" : "118.113.69.83",
  "args" : {

  },
  "url" : "https:\/\/httpbin.org\/get"
}

在转换为 JSON/JSONString 时忽略和替换属性

class HttpBin: JSONMappable {
    var args: [String: Any]
    var headers: HttpBinHeaders
    var origin: String
    var url: String

    required init(json: JSON) {
        args = json["args"].dictionaryValue
        headers = HttpBinHeaders(json: json["headers"])
        origin = json["origin"].stringValue
        url = json["url"].stringValue
    }
}

public var ignoreProperties: [String]? {
    return ["args"]
}

public var replacedProperties: [String : String]? {
    return ["origin": "newOrigin"]
}

您将得到如下结果

{
  "newOrigin" : "118.113.69.83",
  "url" : "https:\/\/httpbin.org\/get",
  "headers" : {
    "acceptEncoding" : "gzip;q=1.0, compress;q=0.5",
    "acceptLanguage" : "en;q=1.0",
    "connection" : "close",
    "accept" : "*\/*",
    "host" : "httpbin.org"
  }
}

与 Moya 一起使用

MoyaProvider<APIService>().request(.testGet) { (result) in
    switch result {
    case let .success(response):
        do {
            let httpBin = try response.mapJSONMappable(HttpBin.self)
            print(httpBin.mapString() ?? "")
         } catch {
            print(error)
        }
    case let .failure(error):
        print(error)
    }
}

与 RxSwift 一起使用

RxMoyaProvider<APIService>().request(.testGet)
     .mapJSONMappable(HttpBin.self)
     .observeOn(SerialDispatchQueueScheduler(internalSerialQueueName: "test"))
     .subscribe { (event) in
          switch event {
          case let .next(httpBin):
               print(httpBin.mapString() ?? "请求完毕")
          case let .error(error):
               print(error)
          default:
               print(event)
          }
     }.addDisposableTo(disposeBag)

作者

ApterKing,[email protected]

许可协议

SwiftyJSONMappable 可在 MIT 许可协议下使用。有关更多信息,请参阅 LICENSE 文件。