我有一个通用的 REST 请求:
struct Request<T> {…}
是请求的T
返回类型,例如:
struct Animal {…}
let animalRequest = Request<Animal>
let animal: Animal = sendRequest(animalRequest)
现在我想表达泛型类型必须符合,Decodable
以便我可以解码来自服务器的 JSON 响应:
struct Request<T> where T: Decodable {…}
struct Animal: Decodable {…}
这是有道理且有效的——直到我收到一个没有响应的请求,一个Request<Void>
. 编译器对此不满意:
Type 'Void' does not conform to protocol 'Decodable'
编译器很快发现了我通过添加Decodable
一致性来解决这个问题的恶作剧:Void
extension Void: Decodable {…} // Error: Non-nominal type 'Void' cannot be extended
让请求泛型而不是返回类型感觉是正确的。有没有办法让它与Void
返回类型一起工作?(例如,只是在服务器上创建一些东西而不返回任何东西的请求。)