Swift 4 - почтовый запрос Alamofire с httpbody - PullRequest
1 голос
/ 24 октября 2019

У меня есть такой пост Alamofire, например:

var jsonArrayOfDictionaries = [[AnyHashable: Any]]()

let user = appDelegate.username
let password = appDelegate.password

let url = webservice + "PostTasks"
let credential = URLCredential(user: user!, password: password!, persistence: .forSession)
let headers = ["Accept": "application/json;odata=verbose", "Content-type": "application/json;odata=verbose"]
let jsonData: Data? = try? JSONSerialization.data(withJSONObject: jsonArrayOfDictionaries, options: .prettyPrinted)

print(jsonData!)

//request.httpBody = jsonData

Alamofire.request(url, method: .post, headers: headers).authenticate(usingCredential: credential).responseJSON {
        (response) in
        switch response.result {
        case .success:
            if let value = response.result.value {

                print(value)

                OperationQueue.main.addOperation({

                    completion(true)

                })


            }else{

                print("There is error in the server response")

                completion(false)

            }

        case .failure (let error):

            print("The NTLM request error is: ", error.localizedDescription)

            completion(false)

        }

    }

Мой вопрос: как мне добавить переменную jsonData в httpbody этого запроса? Я изучил эту проблему, и все решения кажутся старыми. Пожалуйста, помогите!

Вот как заполняется jsonArrayOfDictionaries:

var jsonArrayOfDictionaries = [[AnyHashable: Any]]()

        for i in 0..<cellHolder.count {

            var jsonDict = [AnyHashable: Any]()

            jsonDict["scheduleTaskID"] = cellHolder[i].scheduleTaskID

            jsonDict["task"] = cellHolder[i].task

            jsonDict["scheduledDate"] = cellHolder[i].scheduledDate

            jsonDict["actualDate"] = cellHolder[i].actualDate

            jsonDict["finishedDate"] = cellHolder[i].finishedDate

            jsonDict["selected"] = (cellHolder[i].selected) ? 1 : 0

            jsonDict["completedBy"] = appDelegate.username

            jsonDict["sortOrder"] = cellHolder[i].sortOrder

            jsonArrayOfDictionaries.append(jsonDict)

            jsonDict = [AnyHashable: Any]()

        }

Он в цикле и добавляется.

1 Ответ

0 голосов
/ 24 октября 2019

1. Измените

let jsonData: Data? = try? JSONSerialization.data(withJSONObject: jsonArrayOfDictionaries, options: .prettyPrinted)

на

let jsonData = try JSONSerialization.jsonObject(with: jsonArrayOfDictionaries, options: []) as? [String : Any]

2. Добавьте jsonData к вашему запросу

Alamofire.request(url, method: .post, headers: headers, parameters: jsonData).authenticate(usingCredential: credential).responseJSON {
...