首页 > 解决方案 > 来自已定义协议的通用结构

问题描述

我知道这对很多人来说可能听起来很基础,但是我今天的大脑在 2 个气缸上工作,我无法弄清楚......

我有这个观点完美地工作。

struct MyView: View {

  @ObservedObject private var myModel:MyModel
  
  init(myModel:MyModel) {
    self.myModel = myModel
  }

现在我有第二种模型。我需要修改MyView为通用的。

所以我首先创建了一个协议,因为两个模型的变量和函数调用将是相同的,并将这些协议分配给两个模型。

现在我需要将视图修改为类似

struct MyView: View {

  @ObservedObject private var myModel:Any
  
  init(myModel:Any) {
    self.myModel = myModel
  }

但我确信这不是这样做的方法。

或类似的东西

struct MyView<T>: View {

  @ObservedObject private var myModel:T
  
  init(myModel:T) {
    self.myModel = myModel
  }

但我无法弄清楚确切的语法。

谢谢

标签: swiftgenerics

解决方案


您只是缺少T作为 ObservableObject 的要求:

struct MyView<T: ObservableObject>: View { ... }

推荐阅读