1

<null>我已经更新到 Swift3 和最新的Alamofire '~> 4.0' 当我尝试制作我的参数时,我现在得到null了我没有设置的设置。这与我的后端冲突。

有办法寄null吗?

当我将值设置为 nil 时,它不包含在put字典中将其删除。但我需要将所有值发回。

我的代码

func saveOfficeHours(days: [OfficeHours]) {
  guard let URL = LocationInfo.shared.url else {
    assertionFailure("location URL is nil")
    return
    }

  let formatter = DateFormatter()
  formatter.dateFormat = "HH:mm:ss"

  func formatTime(time: Date?) -> Any {
      guard let time = time else { return NSNull() }
      return formatter.string(from: time)
  }

  var parameters: [String: Any] = [:]
  for week in days {
    parameters["\(week.day)_hours_start"] = formatTime(time: week.hoursStart)
    parameters["\(week.day)_hours_stop"] =  formatTime(time: week.hoursEnd)
    parameters["\(week.day)_lunch_hours_start"] =  formatTime(time: week.lunchStart)
    parameters["\(week.day)_lunch_hours_stop"] =  formatTime(time: week.lunchEnd)
    parameters["\(week.day)_break_hours_start"] =  formatTime(time: week.breakStart)
    parameters["\(week.day)_break_hours_stop"] =  formatTime(time: week.breakEnd)
  }

  Alamofire.request(URL, method: .put, parameters: parameters, encoding: URLEncoding.httpBody, headers: API.workstationTokenAuthHeaders()).validate().responseJSON {
    response in
    switch response.result {
    case .success:
        print("Success setting office hours")
    case .failure(let error):
        print("Failure setting office hours: \n \n -------==========-------- \n \n\(error)\n \n -------==========-------- \n")
    }
  }
}

提前感谢您的帮助。

4

1 回答 1

0

NSNull我不会通过 Alamofire 和使用您的参数通过 HTTP 发送的数据之间的各种抽象来正确地依赖映射,而是执行以下操作:

func formatTime(time: Date?) -> String? {
  guard let time = time else { return nil }
  return formatter.string(from: time)
}

var parameters: [String: Any] = [:]
  for week in days {
    if let hoursStart = formatTime(time: week.hoursStart) { parameters["\(week.day)_hours_start"] = hoursStart } 
    if let hoursEnd = formatTime(time: week.hoursEnd) { parameters["\(week.day)_hours_stop"] = hoursEnd } 
    if let lunchStart = formatTime(time: week.lunchStart) { parameters["\(week.day)_lunch_hours_start"] =  lunchStart } 
    if let lunchStop = formatTime(time: week.lunchEnd) { parameters["\(week.day)_lunch_hours_stop"] = lunchStop } 
    if let breakStart = formatTime(time: week.breakStart) { parameters["\(week.day)_break_hours_start"] = breakHoursStart } 
    if let breakEnd = formatTime(time: week.breakEnd) { parameters["\(week.day)_break_hours_stop"] = breakEnd }  
  }

顺便说一句,您的问题应该说明您看到的确切位置<null>而不是null?在 Cocoa 中的一些日志记录调用中,还是在您的服务器端?尽管如此,更安全(并且可以说是 Swiftier,因为formatTime在上面的示例中有一个有意义的返回类型)选项将高于 IMO。

于 2016-10-14T01:11:54.147 回答