MoyaMapper基于 Moya 和 SwiftyJSON 的快速解析模型工具

联合创作 · 2023-09-29 07:35

MoyaMapper是基于 Moya 和 SwiftyJSON 封装的工具,以 Moya 的 plugin 的方式来实现间接解析,支持RxSwift 。

Usage

一、注入

  1. 定义一个继承于ModelableParameterType的类

final class NetParameter : ModelableParameterType {
    var successValue: String {
        return "false"
    }

    var statusCodeKey: String {
        return "error"
    }

    var tipStrKey: String {
        return ""
    }

    var modelKey: String {
        return "results"
    }
}
  1. 以plugin的方式传递给MoyaProvider

let lxfNetTool = MoyaProvider<LXFNetworkTool>(plugins: [MoyaMapperPlugin(NetParameter())])

二、定义模型

  1. 创建一个继承于Modelable的结构体

struct MyModel: Modelable {
    
    var _id = ""
    ......
    
    init?(_ json: JSON) {
        
    }
    
    mutating func mapping(_ json: JSON) {
        self._id = json["_id"].stringValue
        ......
    }
}

三、解析

这里只贴出主要代码

  • Normal

lxfNetTool.request(.data(type: .all, size: 10, index: 1)) { result in
    guard let response = result.value else { return }
    
    // Models
    guard let models = try? response.mapArray(MyModel.self) else {return}
    for model in models {
        print("id -- \(model._id)")
    }
    
    // 使用自定义模型参数类
    /*
    guard let models = try? response.mapArray(MyModel.self, params: { () -> (ModelableParameterType) in
        return CustomParameter()
    }) else {return}
    */
}
  • Rx

// let rxRequest: Single<Response>

// MARK: Rx
let rxRequest = lxfNetTool.rx.request(.data(type: .all, size: 10, index: 1))

// Models
rxRequest.mapArray(MyModel.self).subscribe(onSuccess: { models in
    for model in models {
        print("id -- \(model._id)")
    }
}).disposed(by: dispseBag)

// Models + Result
rxRequest.mapArrResult(MyModel.self).subscribe(onSuccess: { (result, models) in
    print("isSuccess --\(result.0)")
    print("tipStr --\(result.1)")
    print("models count -- \(models.count)")
}).disposed(by: dispseBag)

// 获取指定路径的值
rxRequest.fetchString(keys: [0, "_id"]).subscribe(onSuccess: { str in
    print("str -- \(str)")
}).disposed(by: dispseBag)

JSON数据对照

为方便理解,这里给出具体使用JSON数据图,结合 Example食用更佳~

CocoaPods

  • 默认安装

MoyaMapper默认只安装Core下的文件

pod 'MoyaMapper'
  • RxSwift拓展

pod 'MoyaMapper/Rx'

License

MoyaMapper is available under the MIT license. See the LICENSE file for more info.

Author

LinXunFeng

浏览 10
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报