【问题标题】:Swift/Alamofire/ObjectMapper: Ignore nil valuesSwift/Alamofire/ObjectMapper:忽略零值
【发布时间】:2019-09-05 11:36:30
【问题描述】:

只是想知道这是否可能,因为我试图避免创建重复/非常相似的模型。

例如,如果我有以下 JSON:

{ 
  "1001": {
    "first_name": "James",
    "last_name": "Smith",
    "age": 30,
  }
  "1002": {
    "first_name": "Sarah",
    "last_name": "Jones",
  }
}

我有以下类来映射用户数据:

class UserModel: Mappable {

  var firstName: String?
  var lastName: String?
  var age: Int?

  required init?(map: Map) {}

  func mapping(map: Map) {
      start           <- map["first_name"]
      current         <- map["last_name"]
      stage           <- map["age"]
  }

}

这很好用,除了打印出响应之外,我会得到以下信息:

{
  {
    "firstName" : "James",
    "lastName"  : "Smith",
    "age"       : 30
  }
  {
    "firstName" : "Sarah",
    "lastName"  : "Jones",
    "age"       : nil
  }
}

有没有办法在发出请求时忽略任何nil 值?试图避免创建另一个年龄已删除的UserModel,而宁愿保留一个模型,而只是忽略我知道不会出现在响应中的键。

【问题讨论】:

  • 成为1001" 无效1001"1001" 然后[Int:Model][String:Model] 分别

标签: swift alamofire alamofireobjectmapper


【解决方案1】:

您可以改用Codable

struct Model : Codable {
  let firstName,lastName:String
  let age:Int?
} 

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase 
let res = try? decoder.decode([String:Model].self,from:data)

【讨论】:

    【解决方案2】:

    试试这个:

    struct UserModelValue: Codable, Equatable {
        let firstName: String?
        let lastName: String?
        let age: Int?
    
        enum CodingKeys: String, CodingKey {
            case firstName = "first_name"
            case lastName = "last_name"
            case age = "age"
        }
    
        init(firstName: String?, lastName: String?, age: Int?) {
            self.firstName = firstName
            self.lastName = lastName
            self.age = age
        }
    }
    
    typealias UserModel = [String: UserModelValue]
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 2020-11-27
      • 2023-03-14
      • 2020-12-10
      • 2019-09-23
      • 2023-03-15
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多