, Попробуйте этот код ...

я есть простой запрос, и я использую AlamofireParameters введите для отправки данных на сервер. Я хотел бы использовать кодируемый. Как мне либо преобразовать мою кодируемую структуру в параметры, либо перенастроить запрос Alamofire на использование объектов JSON в качестве параметра? Каков наилучший и наиболее эффективный способ отправлять сообщения и отправлять запросы с помощью Alamofire?

Вот что я сейчас делаю с Alamofire.

func addProduct(product:MainProduct, completionHandler:@escaping ((JSON?, Error?)->Void)) {

    let url = "INSERT_URL"

    let headers: HTTPHeaders = [
        "Content-Type": "application/json"
    ]

    var parameters:Parameters = [:]
    parameters["orderId"] = product.orderId
    parameters["orderSize"] = product.orderSize
    parameters["theOrderStatus"] = product.orderStatus
    let purchDate = Int((product.purchaseDate.timeIntervalSince1970)*1000)
    parameters["purchaseDate"] = purchDate
    parameters["archived"] = false

    Alamofire.request(url, method:.put, parameters: parameters, encoding: JSONEncoding.default, headers:headers).responseJSON {response in
        switch response.result {
        case .success(let value):
            print ("finish")
            let swiftyJson = JSON(value)
            completionHandler(swiftyJson, nil)
        case .failure(let error):
            completionHandler(nil, error)
        }
    }
}

Это наша структура.

struct MainProduct:Codable{

    var purchaseDate:Date
    var orderId:String
    var orderSize:Double
    var orderStatus:OrderStatus?

    var archived:Bool

    private enum CodingKeys: String, CodingKey {
        case purchaseDate
        case orderId
        case orderSize
        case orderStatus = "theOrderStatus"
        case archived
    }
}
 Nevin Jethmalani07 дек. 2017 г., 01:58
Имеет смысл. Спасибо! Вы знаете, как кодировать структуру?
 Nevin Jethmalani07 дек. 2017 г., 00:36
так что вы говорите, что я должен просто избавиться от! правильно?
 Dávid Pásztor07 дек. 2017 г., 00:35
Почему вы объявляете большинство ваших значений как неявно развернутые необязательные вMainProduct? Это не имеет никакого смысла.
 Dávid Pásztor07 дек. 2017 г., 01:56
На самом деле. Не следует использовать неявно развернутый необязательный параметр, если у вас нет для этого веских причин, поскольку они могут легко привести к ошибкам, если их неправильно использовать.

Ответы на вопрос(1)

Решение Вопроса

Вы можете сделать новыйURLRequest и установитьhttpBody к вашему закодированномуjsonData, Попробуйте этот код ...

func addProduct(product: MainProduct, completionHandler: @escaping ((JSON?, Error?)->Void)) {

    let encoder = JSONEncoder()
    let jsonData = try! encoder.encode(product)

    let url = "INSERT_URL"

    var request = URLRequest(url: url)
    request.httpMethod = HTTPMethod.put.rawValue
    request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    request.httpBody = jsonData

    Alamofire.request(request).responseJSON { response in
        switch response.result {
        case .success(let value):
            print ("finish")
            let swiftyJson = JSON(value)
            completionHandler(swiftyJson, nil)
        case .failure(let error):
            completionHandler(nil, error)
        }
    }
}

Ваш ответ на вопрос