MVVM 中 Swift 中 ViewModel 输入和输出类型的自定义协议一致性

问题描述 投票:0回答:1

我想为我的 MVVM 架构创建输入、输出和 ViewModel 的基本协议。这是我目前为此目的的实现。

我真的很想写这样的代码。

但问题是,当我尝试声明

No type for 'Self.Input' can satisfy both 'Self.Input == any MyViewModelInput' and 'Self.Input : ViewModelInput'
协议时,XCode 会抱怨
MyViewModel

以下是我想要满足的主题:

  • ViewModelInput
    是通用协议,允许我对某些功能使用默认实现
  • ViewModelOutput
    是通用协议,允许我对某些功能使用默认实现
  • ViewModel 的输入和输出由
    ViewModelInput
    ViewModelOutput
  • 键入
  • MyViewModel
    协议符合
    ViewModel
    协议,并具有适当的
    Input
    Output
    关联的 type-s

protocol ViewModelInput {
    func onViewDidLoad()
}

extension ViewModelInput {
    func onViewDidLoad() {}
}

protocol ViewModelOutput { }

protocol ViewModel: AnyObject {
    associatedtype Input: ViewModelInput
    associatedtype Output: ViewModelOutput
}

protocol MyViewModelInput: ViewModelInput { }
protocol MyViewModelOutput: ViewModelOutput { }

// [On this bottom line there is error: `No type for 'Self.Input' can satisfy both 'Self.Input == any MyViewModelInput'
protocol MyViewModel: ViewModel           
    where Input == MyViewModelInput, 
          Output == MyViewModelOutput { }

final class DefaultMyViewModel: MyViewModel { }

如何更改代码,使其满足我的标准并且不存在任何剩余错误?

swift input mvvm uikit viewmodel
1个回答
0
投票

根据@Joakim Danielson 的说法,

在 where 条件中将

==
更改为
:
将消除编译器错误

而且效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.