【问题标题】:Posting nested model using Alamofire使用 Alamofire 发布嵌套模型
【发布时间】:2018-01-24 06:47:22
【问题描述】:

我必须在服务器上发布一些数据。数据的 JSON 结构如下所示。

"hospital": {
    "hospitalId": "1212111",
    "hospitalName": "xcxcxcx",
    "address": {
        "addressLine1": "fagsgsah",
        "locality": {
            "id": "",
            "name": "",
            "pLink": ""
        },
        "city": {
            "id": "",
            "name": "",
            "pLink": ""
        }           
    }
}

我可以很容易地使用 Dictionary 来实现这种数据结构。但我读过创建模型是发布和解析数据的最佳实践。我创建了四个模型HospitalAddressStateCity 以获得更大的灵活性。正如您在医院模型中看到的那样,任何模型中都可能有更多属性。我的问题是如何实现给定的 JSON 结构,我可以将其作为参数传递给 Alamofire。根据数据要求,我是否必须在模型中使用write multiple initializer

import UIKit

class Hospital {
    var hospitalId:String?
    var hospitalName:String?
    var address:Address?
    var fee:Int?
    var openingTime:UInt64?
    var closingTime:UInt64?
}

/** Address **/
class Address {
    var addressLine1:String?
    var locality:Locality?
    var city:City?
}

/** City **/
class City {
    var cityId:String?
    var cityName:String?
    var cityPLink:String?
}

/** locality **/
class Locality {
    var localityId:String?
    var localityName:String?
    var localityPLink:String?
}

【问题讨论】:

    标签: ios json swift model


    【解决方案1】:

    Almofire 不支持将 Modal 类自动绑定到响应中。是的,您应该使用每个模态类的 JSON 数据编写模态初始化程序。

    https://gist.github.com/jpotts18/e39ee74de84ae094b270 提供了简单 JSON、集合和嵌套 JSON 数据如何绑定到模态类的示例。

    【讨论】:

    • 我可以将模型数据转换为 json,然后将其附加到请求的正文中。我只想要建模部分,我可以处理 Alamofire。
    【解决方案2】:

    试试这个可能会有帮助。

    import Foundation
    
    class Hospitalmodel: NSObject {
    
         var hospitalId:String!
            var hospitalName:String!
        var fee:Int!
            var openingTime:UInt64!
            var closingTime:UInt64!
    
        var address:Address!
    
        init(dict:NSDictionary){
    
            if(dict["hospitalId"] != nil){
                self.hospitalId = dict["hospitalId"] as! String
            }
    
            if(dict["hospitalName"] != nil){
                self.hospitalName = dict["hospitalName"] as! String
            }
    
            if(dict["address"] != nil){
    
                    let send = dict["address"] as! NSDictionary
                    if send.allKeys.count>0{
                        self.address = Address.init(dict: send)
                    }
             }
    
        }
    }
    
    class Address {
    
        var addressLine1:String!
        var locality:Locality!
        var city:City!
    
        init(dict:NSDictionary)
        {
            if(dict["addressLine1"] != nil){
                self. addressLine1 = dict["addressLine1"] as! String
            }
    
            if(dict["locality"] != nil){
    
                    let send = dict["locality"] as! NSDictionary
                    if send.allKeys.count>0{
                        self.locality = Locality.init(dict: send)
                    }
             }
    
            if(dict["city"] != nil){
    
                    let send = dict["city"] as! NSDictionary
                    if send.allKeys.count>0{
                        self.city = City.init(dict: send)
                    }
             }
        }
    }
    
    class Locality {
    
        var localityId:String!
        var localityName:String!
        var localityPLink:String!
    
        init(dict:NSDictionary)
        {
            if(dict["id"] != nil){
                self.localityId = dict["id"] as! String
            }
    
            if(dict["name"] != nil){
                self.localityName = dict["name"] as! String
            }
    
            if(dict["pLink"] != nil){
                self.localityPLink = dict["pLink"] as! String
            }
        }
    }
    
    class City {
    
        var cityId:String!
        var cityName:String!
        var cityPLink:String!
    
        init(dict:NSDictionary)
        {
            if(dict["id"] != nil){
                self.cityId = dict["id"] as! String
            }
    
            if(dict["name"] != nil){
                self. cityName = dict["name"] as! String
            }
    
            if(dict["pLink"] != nil){
                self.cityPLink = dict["pLink"] as! String
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      我还没有尝试过 swift4 Codable,如果你使用 swift4,它可能是你的选择,如果是 swift 3,那么我建议使用 AlamofireObjectMapper

      请查看非常易于使用的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-21
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多