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

egmofgnx  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(97)

我想为我的MVVM体系结构创建输入、输出和视图模型的基础协议。下面是我目前为此目的的实现。
我真的很想写这样的代码。
但问题是,当我试图声明MyViewModel协议时,XCode会抱怨No type for 'Self.Input' can satisfy both 'Self.Input == any MyViewModelInput' and 'Self.Input : ViewModelInput'
以下是我想要满足的主题:

  • ViewModelInput是通用协议,允许我使用某些函数的默认实现
  • ViewModelOutput是通用协议,允许我使用某些函数的默认实现
  • ViewModel的输入和输出类型为ViewModelInputViewModelOutput
  • 存在符合ViewModel协议的MyViewModel协议,并具有相应的InputOutput关联类型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 { }

我如何更改代码,使其满足我的标准,并且没有剩余的错误?

nlejzf6q

nlejzf6q1#

根据@Joakim Danielson的说法,
在where条件中将==更改为:将使编译器错误静音
而且效果很好。

相关问题