如何使用Swift泛型枚举?

时间:2017-11-26 13:58:19

标签: swift generics request

我的问题很简单?你怎么能在enum中使用泛型?

我有一个协议:

protocol Request {
   associatedType BackendModel = Codable
}

class FirstModel: Codable { }

class FirstRequest: Request {
   typealias BackendModel = Codable
}

现在我想为请求调用创建一个成功/失败的枚举。成功应该返回我的BackendModel。我认为这样的事情,但它不起作用。

enum Response<T: Codable> {
   case success(T)
   case failure(Error)
}

然后我会在功能完成中使用它

// This function is used in an extension of the Request protocol.
func doCallWithCompletion(completion: ((Response<T: BackendModel>) -> Void)?) {
     let model = FirstModel()
     completion(.success(model))
}

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要将具体类型作为泛型参数,同时使用枚举声明闭包:

extension Request {

    func doCallWith(completion:(Response<FirstModel>) -> ()) {
        let model = FirstModel()
        completion(.success(model))
    }

}