Как мне отправить, когда я вызываю API сервера, используя FormData, когда у меня есть другой тип данных параметра? - PullRequest
0 голосов
/ 27 сентября 2019

Я развиваюсь Swift5.Моя проблема в том, что я сейчас отправляю сообщение с сервера в Formdata.Это работает хорошо,

, но это проблема, когда типы данных параметров различны.В настоящее время в качестве параметра принимается только string. Но на этот раз у нас также есть тип Int.Это вызывает ошибку.Как мне решить эту проблему?

Моя функция публикации

    func post(url: URL, _ parameters: [String: String], encoding: String.Encoding, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) throws {

        var postRequest: URLRequest = URLRequest(url: url)
        postRequest.httpMethod = "POST"

        let makeRandom = { UInt32.random(in: (.min)...(.max)) }
        let boundary = String(format: "------------------------%08X%08X", makeRandom(), makeRandom())

        let contentType: String = try {
            guard let charset = CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(encoding.rawValue)) else {
                throw IXError.characterSetName
            }
            return "multipart/form-data; charset=\(charset); boundary=\(boundary)"
            }()

        var body = Data()

        for (rawName, rawValue) in parameters {
            if !body.isEmpty {
                body.append("\r\n".data(using: .utf8)!)
            }

            body.append("--\(boundary)\r\n".data(using: .utf8)!)

            guard
                rawName.canBeConverted(to: encoding),
                let disposition = "Content-Disposition: form-data; name=\"\(rawName)\"\r\n".data(using: encoding) else {
                    throw IXError.characterSetName
            }
            body.append(disposition)

            body.append("\r\n".data(using: .utf8)!)

            guard let value = rawValue.data(using: encoding) else {
                throw IXError.characterSetName
            }

            body.append(value)
        }

        body.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

        postRequest.setValue(contentType, forHTTPHeaderField: "Content-Type")
        postRequest.httpBody = body
        session.dataTask(with: postRequest, completionHandler: completionHandler).resume()

    }

Значение данных для отправки

 var dict = [String: String]()
        dict["test1"] = "00"
        dict["test2"] = "0001"
        dict["test3"] = "testing"
        dict["test4"] = 1000   // Int32
        dict["test5"] = ""
        dict["test6"] = 0   // Int32
 try globalUrl.post(url: url, dict, encoding: .utf8, completionHandler: { data, response, error in
 ...

Изменение переменных параметров на Любые приводит ко многим ошибкам.

_ параметры: [Строка: Любая]

Ошибка

Guard letvalue = rawValue.data (using: encoding) else {// Значение типа 'Any' не имеет члена 'data'

Тип отправляемых данных формы

    dict["test1"] = String
    dict["test2"] = String
    dict["test3"] = String
    dict["test4"] = Int32
    dict["test5"] = String
    dict["test6"] = Int32

Как я могу это решить ??

Пожалуйста, дайте мне знать, если у вас есть более простой код.Мне нравится простой код.

...