我有一个名为ResponseProtocol
的协议,其中包含一个本身就是协议ResponseModel
的变量。
我正在尝试以与协议类型不同的方式实现它,但是我遇到了这个错误:
类型'FetchUserResponse'不符合协议 'ResponseProtocol'
protocol ResponseModel { }
protocol ResponseProtocol {
var response: ResponseModel
}
struct UserModel: ResponseModel {
}
struct FetchUserResponse: ResponseProtocol {
var response: UserModel
}
我的问题我,为什么我会收到此错误?
UserModel
是 ResponseModel
。
我的第二个问题-我该如何解决?谢谢!
答案 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())