JSONEncoder で Dictionary を json にエンコードしたい。Request のようで、辞書をパラメータとして受け取り、それを http body として json にエンコードします。コードは次のようになります。
let dict = ["name": "abcde"]
protocol Request {
var params: [String: Encodable] { get set }
func encode<T>(_ value: T) throws -> Data where T : Encodable
}
extension Request {
func encode<T>(_ value: T) throws -> Data where T : Encodable {
return try JSONEncoder().encode(value)
}
var body: Data? {
if let encoded = try? self.encode(self.params) {
return encoded
}
return nil
}
}
struct BaseRequest: Request {
var params: [String : Encodable]
}
let req = BaseRequest(params: dict)
let body = req.body
しかし、このコードはエラーが発生します
致命的なエラー: Encodable がそれ自体に準拠していないため、Dictionary<String, Encodable> は Encodable に準拠していません。エンコードまたはデコードするには、具象型を使用する必要があります。
これをエンコード可能にするにはどうすればよいですか?