我有一个通用的REST请求:
struct Request<T> {…}
Run Code Online (Sandbox Code Playgroud)
这T是请求的返回类型,例如:
struct Animal {…}
let animalRequest = Request<Animal>
let animal: Animal = sendRequest(animalRequest)
Run Code Online (Sandbox Code Playgroud)
现在我想表达泛型类型必须符合,Decodable以便我可以解码来自服务器的JSON响应:
struct Request<T> where T: Decodable {…}
struct Animal: Decodable {…}
Run Code Online (Sandbox Code Playgroud)
这是有道理和有效的 - 直到我得到一个没有响应的请求,a Request<Void>.编译器对此不满意:
Type 'Void' does not conform to protocol 'Decodable'
Run Code Online (Sandbox Code Playgroud)
我通过添加Decodable一致性来解决这个问题的错误尝试Void很快被编译器发现:
extension Void: Decodable {…} // Error: Non-nominal type 'Void' cannot be extended
Run Code Online (Sandbox Code Playgroud)
将请求通用于返回类型是正确的.有没有办法让它与Void返回类型一起使用?(例如,只在服务器上创建内容并且不返回任何内容的请求.)