swift - 具有通用协议(protocol)的 VIPER 架构

标签 swift generics viper-architecture

我有一个关于 VIPER 架构和泛型协议(protocol)的有趣问题。

看起来 Presenter 和 Interactor 通信很多,(用于获取和接收数据),但是 Interactor 的“输出”功能将始终相同

类似于:

func dataFetched(object: JSONObject)

如果你有 10 个模块,你将有 10 倍的这个功能,只有 JSONObject 发生变化......

是否可以使用类似的东西

protocol Ouput {
  associatedType Object
  func dataFetched(object: Object)
}

然后在presenter中选择Object的类型?

最佳答案

如果 JSONObject 是一个实体,presenter 不应该知道它。相反,交互器应该返回可以转换为 ViewModel 的多态类型。然后演示者可以将此 ViewModel 传递给 View 。因此交互器输出可能如下所示:

func didFetched(object: ViewModelConvertible)

关于swift - 具有通用协议(protocol)的 VIPER 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49175446/

相关文章:

swift - 如何访问 [UIApplicationOpenURLOptionsKey : Any] in Swift 4? 的值

swift - 在 Swift 中使用结构体代替类

c# - 非通用声明不允许约束

ios - VIPER架构: tab bar controller

iOS - 在 VIPER 模式上配置自定义 UITableViewCell

swift - 将 Swift 泛型类转换为具有类型别名的协议(protocol)

json - Swift 代码出错不知道该写什么来返回?

generics - Kotlin:枚举上的通用迭代器:如何声明类型变量

arrays - 为什么 required 关键字 init 在通用 Array where 子句中是强制性的?