Как передать универсальное свойство 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] = [:]