我想为我的 MVVM 架构创建输入、输出和 ViewModel 的基本协议。这是我目前为此目的的实现。
我真的很想写这样的代码。
但问题是,当我尝试声明
No type for 'Self.Input' can satisfy both 'Self.Input == any MyViewModelInput' and 'Self.Input : ViewModelInput'
协议时,XCode 会抱怨 MyViewModel
。
以下是我想要满足的主题:
ViewModelInput
是通用协议,允许我对某些功能使用默认实现ViewModelOutput
是通用协议,允许我对某些功能使用默认实现ViewModelInput
和 ViewModelOutput
MyViewModel
协议符合 ViewModel
协议,并具有适当的 Input
和 Output
关联的 type-sprotocol 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 { }
如何更改代码,使其满足我的标准并且不存在任何剩余错误?
根据@Joakim Danielson 的说法,
在 where 条件中将
更改为==
将消除编译器错误:
而且效果很好。