【问题标题】:Implement protocol with different variable type实现具有不同变量类型的协议
【发布时间】:2020-08-02 10:13:10
【问题描述】:

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

类型“FetchUserResponse”不符合协议 '响应协议'

protocol ResponseModel { }

protocol ResponseProtocol {
    var response: ResponseModel
}

struct UserModel: ResponseModel {

}

struct FetchUserResponse: ResponseProtocol {
    var response: UserModel
}

我的问题是,为什么会出现此错误? UserModel 是一个 ResponseModel

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

【问题讨论】:

    标签: swift protocols swift-protocols


    【解决方案1】:

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

    更好的方法是关联类型

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

    【讨论】:

      【解决方案2】:

      协议不支持继承变量
      您可以将您的 var 响应作为 ResponseModel 并将其转换为您的使用

      【讨论】:

        【解决方案3】:

        您的响应变量需要是 ResponseModel

        struct FetchUserResponse: ResponseProtocol {
            var response: ResponseModel
        }
        

        但您可以根据多态性概念将 UserModel 分配给响应

        var object = FetchUserResponse(response: UserModel())
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-14
          • 2022-01-21
          • 2021-10-19
          相关资源
          最近更新 更多