Представление выглядит следующим образом:
Код: Выделить всё
struct ContentView: View {
@State var contentModel: ContentModelProtocol
init(contentModel: ContentModelProtocol = ContentModel()) {
_contentModel = State(initialValue: contentModel)
}
var body: some View {
// The view's body that uses the model
}
}
#Preview {
ContentView(contentModel: ContentModelMock())
}
Код: Выделить всё
@MainActor
protocol ContentModelProtocol: Observable {
var value1: String { get }
var value2: Int { get }
func usefulFunction()
}
@MainActor
@Observable
class ContentModel: ContentModelProtocol {
var value1: String = ""
var value2: Int = 0
func usefulFunction() {
// Function's body
}
}
@MainActor
@Observable
class ContentModelMock: ContentModelProtocol {
var value1: String = ""
var value2: Int = 0
func usefullFunction() {
// Function's body
}
}
Код: Выделить всё
struct ChildView: View {
@Bindable var contentModel: ContentModelProtocol
init(contentModel: ContentModelProtocol = ContentModel()) {
_contentModel = Bindable(wrappedValue: contentModel)
}
}
Решением было бы, чтобы родительское представление добавляло модель представления в среду, а дочернее представление получало ее оттуда. Это должно работать с протоколом, позволяющим использовать макет для тестирования и предварительного просмотра. Однако теперь мне интересно, как это сделать без использования среды, я не могу себе представить, что это невозможно.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... child-view
Мобильная версия