我已更新到Swift3和最新的Alamofire'〜> 4.0'
当我尝试创建参数时,我现在得到<null>
而不是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")
}
}
}
提前感谢您的帮助。
答案 0 :(得分:0)
我不会通过Alamofire与通过HTTP发送的数据之间的各种抽象正确地依赖NSNull
映射,而是执行以下操作:
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。