часто мне нужно перенести данные из представления Swiftui в соответствующую ViewModel, позволяя ViewModel вычислять строки, значения и т. Д., Для отображения в представлении. Я пытаюсь найти архитектурный подход, который согласуется с философией Swiftui при минимизации кода шаблона. P> Лучшее решение, которое я представлял, включает следующие шаги: < /p>
передача данных с помощью инициализатора: < /strong> я передаю соответствующую Свойство (например, структура или примитивное значение) для представления в качестве параметра в его инициализаторе. @state < /code> переменная в представлении. OnAppear , чтобы установить начальные данные в ViewModel. >
< /ul>
< /li>
< /ol>
Забота: < /strong> < /h3>
< P> Хотя этот подход работает, я подозреваю, что использование .onpear и .onchange для этой цели может быть не идеальным. Я чувствую, что мне не хватает более элегантного или идиоматического решения. Ниже я передаю простое значение counter , но в реальном приложении это обычно будет более сложной структурой (например, сектор полета или результат расчета). Это представляет собой решение, которое я использую сейчас. В синхронизации с данными, передаваемыми из представления, избегая необходимости полагаться на .onapear и .onchange ? Как я могу достичь этого более быстрым способом при минимизации шаблона? < /P>
struct ContentView: View {
@State private var counter = 1
init() {
print("ContentView: initializing")
}
var body: some View {
let _ = print("ContentView: evaluating body declaration")
NavigationStack {
VStack {
Text("Local counter value: \(counter)")
SecondView(counter: counter)
Button("Increment") {
counter += 1
}
}
}
}
}
struct SecondView: View {
var counter: Int
@State private var viewModel = SecondViewModel()
var body: some View {
let _ = print("SecondView: updating body property")
Group {
Text("Second View: counter is \(counter)")
Text(viewModel.counterString)
}
.onAppear {
viewModel.counter = counter
}
.onChange(of: counter) { _, newValue in
viewModel.counter = newValue
}
}
}
@Observable
class SecondViewModel {
var counter = 0
var counterString: String {
"SecondView ViewModel: counter is \(counter)"
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -while-mai
Как лучше всего перенести данные из представления Swiftui в его ViewModel, сохраняя при этом синхронизацию и избегая кот ⇐ IOS
Программируем под IOS
1738839969
Anonymous
часто мне нужно перенести данные из представления Swiftui в соответствующую ViewModel, позволяя ViewModel вычислять строки, значения и т. Д., Для отображения в представлении. Я пытаюсь найти архитектурный подход, который согласуется с философией Swiftui при минимизации кода шаблона. P> Лучшее решение, которое я представлял, включает следующие шаги: < /p>
передача данных с помощью инициализатора: < /strong> я передаю соответствующую Свойство (например, структура или примитивное значение) для представления в качестве параметра в его инициализаторе. @state < /code> переменная в представлении. OnAppear , чтобы установить начальные данные в ViewModel. >
< /ul>
< /li>
< /ol>
Забота: < /strong> < /h3>
< P> Хотя этот подход работает, я подозреваю, что использование .onpear и .onchange для этой цели может быть не идеальным. Я чувствую, что мне не хватает более элегантного или идиоматического решения. Ниже я передаю простое значение counter , но в реальном приложении это обычно будет более сложной структурой (например, сектор полета или результат расчета). Это представляет собой решение, которое я использую сейчас. В синхронизации с данными, передаваемыми из представления, избегая необходимости полагаться на .onapear и .onchange ? Как я могу достичь этого более быстрым способом при минимизации шаблона? < /P>
struct ContentView: View {
@State private var counter = 1
init() {
print("ContentView: initializing")
}
var body: some View {
let _ = print("ContentView: evaluating body declaration")
NavigationStack {
VStack {
Text("Local counter value: \(counter)")
SecondView(counter: counter)
Button("Increment") {
counter += 1
}
}
}
}
}
struct SecondView: View {
var counter: Int
@State private var viewModel = SecondViewModel()
var body: some View {
let _ = print("SecondView: updating body property")
Group {
Text("Second View: counter is \(counter)")
Text(viewModel.counterString)
}
.onAppear {
viewModel.counter = counter
}
.onChange(of: counter) { _, newValue in
viewModel.counter = newValue
}
}
}
@Observable
class SecondViewModel {
var counter = 0
var counterString: String {
"SecondView ViewModel: counter is \(counter)"
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79417653/what-is-the-best-way-to-pass-data-from-a-swiftui-view-to-its-viewmodel-while-mai[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия