6

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 に準拠していません。エンコードまたはデコードするには、具象型を使用する必要があります。

これをエンコード可能にするにはどうすればよいですか?

4

2 に答える 2