Как передать свойство GENERI C @Published в ViewModel ObservableObject в представление? - PullRequest
1 голос
/ 28 мая 2020

Как передать универсальное свойство c @Published в ViewModel ObservableObject в представление? Может ли обобщенная переменная c наблюдаться с помощью @Published?

Объявление протокола:

protocol SectionHeaderViewObject {
         var name: String
         var iconName: String
         ...
    }

Я опускаю реализацию SectionHeaderViewGenerator с помощью customObject1 и customObject2. Вот viewModel и headerView.

struct ListViewModel: ObservableObject {
   @Published var sections: [customObject1 : [Int]] = [:]

   enum Sort {
      case customObject1, customObject2
   }

   var sort: Sort {
      didSet {
          switch self {
              case .customObject1:
                        sections = [CustomObject1():[1]]
              case .customObject2:
                        sections = [CustomObject2():[1]]
          }
       }
   }
}

struct SectionHeaderView<T: SectionHeaderViewGenerator> {
    var customObject: T
    var body: some View {
         HStack {
            Text(customObject.name)
            Image(customObject.iconName)
    }
}

Вызов из вида:

struct ListView: View {
    @ObservedObject var viewModel: ListViewModel
    var body: some View {
        List {
           Section(header: SectionHeaderView(customObject: viewModel.customObject) {
                  aRowView()
             }
        }

}

Я хочу сделать что-то вроде этого. Но у меня возникла проблема с реализацией дженериков для ключей словаря sections. Фактически,

@Published var sections: [SectionHeaderViewObject : Int] = [:]

путем объединения:

@Published var sections: [customObject1 : Int] = [:]
@Published var sections: [customObject2 : Int] = [:]
...