2016-10-13 3 views
1

Я обновил до Swift3 и последняя Alamofire«~> 4,0» Когда я пытаюсь сделать мои параметры я теперь получить <null> вместо null для настройки, которые не установили , Что конфликтует с моим бэкэндом.Отправка `значение Null` для параметра с Alamofire

Есть ли способ для отправки null?

Когда я устанавливаю значение в ноль, он не включен в 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

Вместо того, чтобы полагаться на 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.

Смежные вопросы