Я пытаюсь найти правильный путь к инициализированным производным переменным в методе body для представления SwiftUI. Примером может быть строковое значение для редактируемого целого числа, которое затем будет отредактировано в TextField. Целое число, например, может быть частью @ObservedObject. Я не могу найти какой-либо удаленно чистый способ сделать это.
Я изучал использование пользовательских инициализаторов, но это не похоже на правильную вещь. Я даже не уверен, что этот код будет запущен в нужное время.
Я также пытался использовать метод .onAppear для TextField, но этот метод не выполняется повторно, когда представлениеперестроен.
упрощенный пример:
final class Values : ObservableObject {
@Published var count: Int = 0;
}
var sharedValues = Values()
struct ContentView : View {
@ObservedObject var values = sharedValues
var body: some View {
VStack {
Button(
action: { self.add() },
label: { Text("Plus")}
)
InnerView()
}
}
func add() { values.count += 1 }
}
struct InnerView : View {
@ObservedObject var values = sharedValues
@State private var text = ""
var body: some View {
// text = String(value.count) - what I want to do
TextField("", text: $text, onEditingChanged: updateCount)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
func updateCount(updated: Bool) { /* this isn't important in this context */}
}
Я надеюсь, что смогу обновлять sharedValues извне и увидеть обновление в MyView. В этом примере я хотел бы нажать кнопку, чтобы обновить текстовое поле с обновленным текстовым значением. Но я не могу придумать, как вычислить строковое представление значения счетчика в соответствующей точке при выполнении кода.
Я пробовал несколько подходов для достижения такого типа результата, ноподойди.