Я создал набор функций 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. Но это действительно неуклюже.
Codable
необходимо указать точный тип. Вы не можете обобщить это с помощью протокола как типа. - person PGDev   schedule 13.11.20181. Expected an argument list of type '(T)'
, что может быть связано с ответом Давида Пастора. - person Larme   schedule 13.11.2018