实施具有不同变量类型的协议

时间:2020-08-02 10:13:10

标签: swift protocols swift-protocols

我有一个名为ResponseProtocol的协议,其中包含一个本身就是协议ResponseModel的变量。 我正在尝试以与协议类型不同的方式实现它,但是我遇到了这个错误:

类型'FetchUserResponse'不符合协议 'ResponseProtocol'

protocol ResponseModel { }

protocol ResponseProtocol {
    var response: ResponseModel
}

struct UserModel: ResponseModel {

}

struct FetchUserResponse: ResponseProtocol {
    var response: UserModel
}

我的问题我,为什么我会收到此错误? UserModel ResponseModel

我的第二个问题-我该如何解决?谢谢!

3 个答案:

答案 0 :(得分:0)

协议要求为var response: ResponseModel,而不是符合协议的类型。

更好的方法是关联类型

protocol ResponseProtocol {
    associatedtype ResponseType
    var response: ResponseType { get }
}

struct UserModel { }

struct FetchUserResponse: ResponseProtocol {
    typealias ResponseType = UserModel
    var response: UserModel
}

答案 1 :(得分:0)

协议不支持继承的变量
您可以将var响应作为ResponseModel进行投放并按您的用法进行投放

答案 2 :(得分:0)

您的响应变量必须为ResponseModel

struct FetchUserResponse: ResponseProtocol {
    var response: ResponseModel
}

但是您可以基于多态性概念将UserModel分配给响应

var object = FetchUserResponse(response: UserModel())