Saya mencoba membuat permintaan posting dengan tubuh dengan cepat menggunakan Alamofire.
tubuh json saya terlihat seperti:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
Saya mencoba membuat let
list
dengan NSDictionnary yang terlihat seperti:
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
dan permintaan saya menggunakan Alamofire terlihat seperti:
Alamofire.request(.POST, "http://myserver.com", parameters: ["IdQuiz":"102","IdUser":"iOSclient","User":"iOSClient","List":list ], encoding: .JSON)
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Permintaan mengalami kesalahan dan saya yakin masalahnya ada pada daftar Kamus, karena jika saya membuat permintaan tanpa daftar, itu berfungsi dengan baik, jadi ada ide?
Saya telah mencoba solusi yang disarankan tetapi saya menghadapi masalah yang sama:
let json = ["List":list,"IdQuiz":"102","IdUser":"iOSclient","UserInformation":"iOSClient"]
let data = NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted,error:nil)
let jsons = NSString(data: data!, encoding: NSUTF8StringEncoding)
Alamofire.request(.POST, "http://myserver.com", parameters: [:], encoding: .Custom({
(convertible, params) in
var mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
mutableRequest.HTTPBody = jsons!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
return (mutableRequest, nil)
}))
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Jawaban:
Anda sudah dekat. Format kamus parameter tampaknya salah. Anda harus mencoba yang berikut ini:
Semoga masalah Anda teratasi. Jika tidak, harap balas dan saya akan menyesuaikan jawaban saya.
sumber
nil
keAnyObject
?Jika Anda menggunakan Alamofire v4.0 + maka jawaban yang diterima akan terlihat seperti ini:
sumber
JSONEncoding
untuk menghilangkan keraguan jenis yang melakukannya untuk saya.Aku tidak suka salah satu jawaban yang lain sejauh (kecuali mungkin satu oleh SwiftDeveloper), karena mereka juga mengharuskan Anda untuk deserialize JSON Anda, hanya untuk itu untuk menjadi serial lagi, atau peduli tentang struktur JSON itu sendiri.
Jawaban yang benar telah diposting oleh afrodev di pertanyaan lain. Anda harus pergi dan memilihnya.
Di bawah ini hanya adaptasi saya, dengan beberapa perubahan kecil (terutama rangkaian karakter UTF-8 eksplisit).
sumber
toJSONString
bukan merupakan metode asli, jadi pada dasarnya ini adalah kotak hitam yang harus Anda terapkan. Kedua, jawaban yang Anda berikan, menyediakan varjson
yang dimulai sebagai string json, secara realistis tidak ada yang memiliki parameter dengan cara itu, kecuali jika Anda mengonversi dan menyimpannya secara lokal dengan cara itu.toJSONString
jawaban saya tidak ada , 2) "secara realistis tidak ada yang memiliki parameter seperti itu" - itu membuat banyak asumsi; JSON bisa berasal dari bagian aplikasi yang sangat berbeda, tidak terkait dengan membuat permintaan sama sekali, dan yang kode jaringannya tidak tahu apa-apa.Xcode 8.X, Swift 3.X
Mudah Digunakan;
sumber
Jika Anda menggunakan
swift4
danAlamofire v4.0
kemudian kode yang diterima akan terlihat seperti ini:sumber
Jawaban yang diterima di Xcode 11 - Swift 5 - Alamofire 5.0
sumber
Saya sedikit mengedit jawaban SwiftDeveloper , karena tidak berhasil untuk saya. Saya menambahkan validasi Alamofire juga.
sumber
Ada beberapa perubahan yang ingin saya beri tahu. Anda dapat mengakses permintaan, JSON, kesalahan dari objek respons mulai sekarang.
sumber
sumber
Berikut adalah cara saya membuat permintaan Http POST dengan swift yang membutuhkan parameter dengan pengkodean Json dan dengan header.
Membuat Klien API BKCAPIClient sebagai instance bersama yang akan menyertakan semua jenis permintaan seperti POST, GET, PUT, DELETE dll.
Kelas Operasi yang dibuat yang berisi semua data yang diperlukan untuk permintaan tertentu dan juga berisi logika parsing di dalam blok penyelesaian.
Panggil API Di Pengontrol Tampilan mana pun di mana kita membutuhkan data ini
sumber
sumber
Jika ada yang bertanya-tanya bagaimana cara melanjutkan model dan barang, lihat di bawah
sumber
Alamofire ~ 5.2 dan Swift 5
Anda dapat menyusun data parameter Anda
Bekerja dengan api json palsu
sumber