Я пытаюсь отправить запрос на публикацию и api, который содержит список «элементов», который может быть изображением или текстом.
Однако я получаю сообщение об ошибке (указано в заголовке)
Вот код, превращающий мои объекты в JSON
var json = [String: Any]()
var jsonItems = [Any]()
for i in 0...(items.count - 1){
var it = [String: Any]()
if let imageData = items[i].image?.jpgData(){
it["image"] = imageData
}
if let text = items[i].text{
it["text"] = text
}
if i == 0 {
it["is_profile"] = true
it["face_detected"] = faceDetected
}
jsonItems.append(it)
}
json["items"] = jsonItems
Есть ли причина, по которой это не будет правильно отформатировано?
EDIT:
Функция jpgData
func jpgData() -> Data? {
return UIImageJPEGRepresentation(self, 0.8)
}
Пример кода, вызывающего сбой:
extension Dictionary {
var json: String {
let invalidJson = "Not a valid JSON"
do {
let jsonData = try JSONSerialization.data(withJSONObject: self, options: .prettyPrinted)
return String(bytes: jsonData, encoding: String.Encoding.utf8) ?? invalidJson
} catch {
return invalidJson
}
}
}
В дополнение к моему примеру кода, передача созданного dict в качестве параметра для запросов Alamofire, запросов URLSession и т. Д. Вызывает сбой с ошибкой из заголовка
РЕДАКТИРОВАТЬ: Решение
Данные изображения действительно должны быть закодированы. Ощущения так очевидны в ретроспективе. Кодирование Base64 работало для распечатки структуры, как в моем расширении, но для сетевых запросов я в конечном итоге использовал класс MultipartFormData Alamofire (пользовательская оболочка вокруг него) и добавил как application/octet-stream
для mimetype. Хотел бы я использовать эмодзи лицевой маской здесь. Я принял один из двух ответов, в которых говорилось о кодировании, которое на самом деле содержало пример кода.