我想为我的MVVM体系结构创建输入、输出和视图模型的基础协议。下面是我目前为此目的的实现。
我真的很想写这样的代码。
但问题是,当我试图声明MyViewModel
协议时,XCode会抱怨No type for 'Self.Input' can satisfy both 'Self.Input == any MyViewModelInput' and 'Self.Input : ViewModelInput'
。
以下是我想要满足的主题:
ViewModelInput
是通用协议,允许我使用某些函数的默认实现ViewModelOutput
是通用协议,允许我使用某些函数的默认实现- ViewModel的输入和输出类型为
ViewModelInput
和ViewModelOutput
- 存在符合
ViewModel
协议的MyViewModel
协议,并具有相应的Input
和Output
关联类型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 { }
我如何更改代码,使其满足我的标准,并且没有剩余的错误?
1条答案
按热度按时间nlejzf6q1#
根据@Joakim Danielson的说法,
在where条件中将
==
更改为:
将使编译器错误静音而且效果很好。