2016-10-13 10 views
1

とパラメータの `NULL`値を送信する私は「〜> 4.0」 私は試してみて、私のパラメータを作るとき、私は今、私が設定されていない設定のための<null>代わりのnullを取得Swift3、最新Alamofireに更新しています。バックエンドと競合します。Alamofire

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

よりもむしろ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のログ記録やサーバー側のログ記録では?また、より安全です(そして上記の例ではformatTimeが意味のある戻り値型を持つようにSwiftierと思われます)。