MoyaObjectMapper 1.0.3

MoyaObjectMapper 1.0.3

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2017年3月
SwiftSwift 版本3.0
SPM支持 SPM

Gustavo Perdomo 维护。



  • 作者:
  • Gustavo Perdomo

MoyaObjectMapper

ObjectMapperMoya 提供了 JSON 序列化的绑定,方便使用。还包括 RxSwiftReactiveSwift 的绑定。

安装

使用

创建一个模型结构体或类。它需要实现 Mappable 协议。有关模型创建的更多详细信息,请参见 这里

import Foundation
import ObjectMapper

struct Repository: Mappable {
    var identifier: Int!
    var name: String!
    var fullName: String!
    var language: String?

    init?(map: Map) {
        if map.JSON["id"] == nil {
            return nil
        }
    }

    mutating func mapping(map: Map) {
        identifier <- map["id"]
        name <- map["name"]
        fullName <- map["full_name"]
        language <- map["language"]
    }
}

然后您有了扩展 Moya 响应的方法。这些方法包括

map(to: type, context: MapContext? = nil) // map object
map(to: [type], context: MapContext? = nil) // map array of objects

对于 RxSwiftReactiveCocoa 还提供了可选映射的方法。这些方法包括

mapOptional(to: type, context: MapContext? = nil)
mapOptional(to: [type], context: MapContext? = nil)

请参阅以下示例,或者在示例项目中查看。

1. 常规使用(不带 RxSwift 或 ReactiveCocoa)

provider = MoyaProvider<GitHub>()
provider.request(GitHub.repos(username: "gperdomor")) { (result) in
    if case .success(let response) = result {
        do {
            let repos = try response.map(to: [Repository.self])
            print(repos)
        } catch Error.jsonMapping(let error) {
            print(try? error.mapString())
        } catch {
            print(":(")
        }
    }
}

2. RxSwift

provider = RxMoyaProvider<GitHub>()
provider.request(GitHub.repo(fullName: "gperdomor/sygnaler"))
        .map(to: Repository.self)
        .subscribe { event in
            switch event {
            case .next(let repo):
                print(repo)
            case .error(let error):
                print(error)
            default: break
            }
        }

此外,RxSwift 模块包含可选映射。这意味着如果映射失败,映射器不会抛出错误,而是返回 nil。例如

provider = RxMoyaProvider<GitHub>()
provider
    .request(GitHub.repos(username: "gperdomor"))
    .mapOptional(to: [Repository.self])
    .subscribe { event in
        switch event {
        case .next(let repos):
            // Here we can have either nil or [Repository] object.
            print(repos)
        case .error(let error):
            print(error)
        default: break
        }
    }

3. ReactiveSwift

provider = ReactiveSwiftMoyaProvider<GitHub>()
provider
    .request(GitHub.repos(username: "gperdomor"))
    .map(to: [Repository.self])
    .start { event in
        switch event {
        case .value(let repos):
            print(repos)
        case .failed(let error):
            print(error)
        default: break
        }
    }

此外,ReactiveSwift 模块包含可选映射。这意味着如果映射失败,映射器不会抛出错误,而是返回 nil。例如

provider = ReactiveSwiftMoyaProvider<GitHub>()
provider
    .request(GitHub.repos(username: "gperdomor"))
    .mapOptional(to: [Repository.self])
    .start { event in
        switch event {
        case .value(let repos):
            // Here we can have either nil or [Repository] object.
            print(repos)
        case .failed(let error):
            print(error)
        default: break
        }
    }

示例项目

在 Demo 目录中有一个示例项目。要使用它,请运行 pod install 以下载所需的库。祝您愉快!

其他映射器

贡献

嘿!喜欢 MoyaObjectMapper 吗?太棒了!我们实际上真的需要您的帮助!

开源不仅仅是写代码。MoyaObjectMapper 需要您的帮助来处理以下任何一项:

  • 查找(和报告!)错误。
  • 新功能建议。
  • 回答问题。
  • 文档改进。
  • 审查拉取请求。
  • 帮助管理问题优先级。
  • 修复错误/新功能。

如果您对此有任何兴趣,请发送一个拉取请求!在几个贡献之后,我们将您添加为仓库管理员,您可以合并拉取请求并帮助方向盘。🚢

授权

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