Я создал набор функций API, которые кодируют объект (используя Struct
, который соответствует Codable
), затем отправляют полученный объект данных JSON на сервер, а затем декодируют ответ JSON. Все работает отлично - особенно доволен новым методом анализа JSON в Swift 4.2. Однако теперь я хочу реорганизовать код, чтобы можно было повторно использовать код для различных вызовов методов - когда я получаю действительно раздражающую ошибку.
func encodeRequestJSON(apiRequestObject: Codable) -> Data {
do {
let encoder = JSONEncoder()
let jsonData = try encoder.encode(apiRequestObject)
let jsonString = String(data: jsonData, encoding: .utf8)
print(jsonString)
} catch {
print("Unexpected error")
}
return jsonData!
}
Это сообщение об ошибке:
Cannot invoke 'encode' with an argument list of type '(Codable)'
Я попытался изменить тип с Codable на Encodable, но получил ту же ошибку, за исключением типа (Encodable) в сообщении. Любой совет? Мой запасной вариант - закодировать данные в текущем ViewController, затем вызвать функцию HTTPPost и затем декодировать обратно в VC. Но это действительно неуклюже.