Вы не указали тип для loginResponse
, и из этого кода невозможно угадать, что это такое. Глядя на код, который вы разместили, я не могу понять, каким должен быть ответ (ничто из того, что вы здесь разместили, не имеет значения .success
или .token
).
Я полагаю, вы подразумевается добавить следующий код:
struct LoginResponse: Codable {
var success: Bool
var token: String
}
И я предполагаю, что где-то есть переменная callback
типа (LoginResponse) -> Void
.
С этим типом вам все равно нужно разрешить компилятор знает, что это то, что вы ожидаете. У него нет возможности угадать бесконечное число типов, которые могут быть возвращены. Вам нужно LoginResponse
:
...
callback: { (loginResponse: LoginResponse) in
...
Альтернативно, вы можете настроить сигнатуру типа так, чтобы она передавала ожидаемый тип, например:
static func JSONPostRequest<Request, Response>(endpoint: String,
jsonData: Request,
returning: Response.Type = Response.self,
callback: @escaping (Response) -> Void,
clientErrorCallback: @escaping (Error) -> Void,
responseErrorCallback: @escaping (URLResponse) -> Void,
requestHeaders: [String: String]?)
where Request: Encodable, Response: Decodable {
Это позволит вам передать returning: LoginResponse.self
, что может быть приятнее, чем встроить его в замыкание:
...
returning: LoginResponse.self,
callback: { loginResponse in
...
(Тем не менее, то, что я здесь обсуждаю, исправляет тот факт, что DecodableType
на самом деле является неоднозначным. Тот факт, что вы получаете ошибку на EncodableType
, предполагает наличие других несовпадений типов. Я рекомендую упростить это до минимального примера, который фактически демонстрирует проблему на игровой площадке. я написал это, мне пришлось угадать кучу лишнего кода.)