Ваш метод ожидает конкретный тип (T
), который реализует протокол Encodable
(<T: Encodable>
).
Таким образом, вы не можете использовать его таким образом, потому что body
должен быть конкретным типом, поскольку Encodable
является просто протоколом для структуры / класса, который должен его реализовать. Вы должны указать, какой тип реализует этот протокол.
Для этого вы можете объявить associatedtype
, который должен реализовывать протокол Encodable
, а затем вы можете указать тип body
в качестве этого связанного типа
protocol RequestData {
...
associatedtype T: Encodable
var body: T? { get }
}
затем внутри структуры / класса, который реализует ваш протокол, вы должны указать тип T
как конкретный тип структуры / класса, который реализует протокол Encodable
struct SomeStruct: RequestData {
...
typealias T = SomeOtherStruct
var body: T?
}
тогда компилятор не выдаст вам ошибки и он должен работать:
request.httpBody = self.mapper.map(from: body)