jsonSerializationとgzipでオブジェクトの配列をアップロードしようとしています。私はgithubで説明されているように構造体を書きました。Alamofire特別な引数 'メソッド'が呼び出されました - カスタムParameterEncoding付き
struct JSONDocumentArrayEncoding: ParameterEncoding {
private let array: [Document]
init(array:[Document]) {
self.array = array
}
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
var urlRequest = urlRequest.urlRequest
let data = try JSONSerialization.data(withJSONObject: array, options: [])
if urlRequest!.value(forHTTPHeaderField: "Content-Type") == nil {
urlRequest!.setValue("application/json", forHTTPHeaderField: "Content-Type")
}
urlRequest!.httpBody = data
return urlRequest!
}
}要求に続い
request = customAlamofireManager.request(
ServerURL ,
method: .post,
parameters: [objects],
encoding: JSONDocumentArrayEncoding,
headers: headers
)
エラー "がコールに追加の引数の方法" です。この問題はgithub1508で議論されましたhereしかし、私は解決策を見ることができません。パラメータは[string:object]として定義されているため、配列を渡すことはできません。したがって、エンコード用のカスタマイズされた構造体でも、このボディデータを渡す方法はありません。私は多分配列のダミーのキーを追加し、辞書の値をキャッチするためにサーバーのAPIを変更する回避策を考えています。しかし理想はありません。
["data":[obj]]のように辞書にランダムキーを追加しようとしましたが、それでも同じエラーです。構造体は辞書ではなく配列を必要としているからです。だからうまくいかない。 – Ning