HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – ObjectMapper – 嵌套的动态键大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Swift 3.1中编写,使用ObjectMapper将我的JSON响应映射到我的模型.

我正在尝试使用动态密钥映射这个相当复杂的JSON响应,并希望得到一些关于我做错的反馈.

一个小组有关于它的进展的统计数据.它的统计数据分为几年甚至几个月.一年内每个月都有结果,投资回报率和胜利. ROI和win只是百分比,但结果键是用下面的键1-5固定的,然后是一个整数值.

我的JSON

"stats": {
    "2017": {
        "1": {
            "results": {
                "1": 13,"2": 3,"3": 1,"4": 1,"5": 0
            },"roi": 0.40337966202464975,"win": 0.8181818181818182
        },"2": {
            "results": {
                "1": 13,"2": 5,"4": 2,"5": 1
            },"roi": 0.26852551067922953,"win": 0.717948717948718
        }
    }
}

我的模特

class GroupResponse: Mappable {
    var stats: [String: [String: StatsMonthResponse]]?

    func mapping(map: Map) {
        stats   <- map["stats"]
    }
}

class StatsMonthResponse: Mappable {
    var tips: [String: Int]?
    var roi: Double?
    var win: Double?

    func mapping(map: Map) {
        tips    <- map["results"]
        roi     <- map["roi"]
        win     <- map["win"]
    }
}

我得到了什么

我得到的响应在我的GroupResponse类中有stats属性,为nil.

我可以采取哪些其他方法来实现这一目标,或者改变我的实现来完成这项工作?

解决方法

我通过手动映射JSON解决了我的问题.

class GroupResponse: Mappable {

    var stats: [String: StatsYear]?

    func mapping(map: Map) {
        stats   <- map["stats"]
    }
 }

class StatsYear: Mappable {

    var months: [String: StatsMonth] = [:]

    override func mapping(map: Map) {

        for (monthKey,monthValue) in map.JSON as! [String: [String: Any]] {

            let month = StatsMonth()

            for (monthKeyType,valueKeyType) in monthValue {

                if monthKeyType == "results" {
                    let tipResultDict = valueKeyType as! [String: Int]

                    for (result,tipsForResult) in tipResultDict {
                        month.tips[result] = tipsForResult
                    }
                }
                else if monthKeyType == "roi" {
                    month.roi = valueKeyType as? Double
                }
                else if monthKeyType == "win" {
                    month.win = valueKeyType as? Double
                }
            }
            months[monthKey] = month
        }
    }
}

class StatsMonth {

    var tips: [String: Int] = [:]
    var roi: Double?
    var win: Double?
}

这个问题可能是一个更好的解决方案,但这就是我现在所坚持的.

希望这有帮助!

大佬总结

以上是大佬教程为你收集整理的ios – ObjectMapper – 嵌套的动态键全部内容,希望文章能够帮你解决ios – ObjectMapper – 嵌套的动态键所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: