Состояние SwiftUI не соответствует - PullRequest
0 голосов
/ 01 апреля 2020

Вот мой код:

import SwiftUI
struct ContentView: View {
    let countView = CountView()
    var body: some View {
        VStack {
            countView
            Text("My Count: \(countView.count)")
            Button("Show My Count"){print("\(self.countView.count)")}
        }
    }
}
struct CountView: View {
    @State var count: Int = 1
    var body: some View {
        VStack {
            Button("Increase count"){self.count += 1}
            Text("Count = \(count)")
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Бывает, что MyCount = и Count = показывают разные значения после увеличения count. Это всегда показывает MyCount = 1 неважно, что такое Count =.

Я делаю неправильно? Как синхронизировать MyCount значение?

1 Ответ

1 голос
/ 01 апреля 2020

Вы не должны получать доступ к другому представлению @State:

Text("My Count: \(countView.count)")

Это гигантский красный флаг, указывающий, что вы делаете что-то не так. Вам нужен @Binding здесь.

Вместо того, чтобы CountView "владеть" count, ContentView должен иметь count, потому что он должен показать его в Text. ContentView должен указать CountView считать с ContentView.count, используя @Binding:

struct ContentView: View {
    @State var count = 1
    var body: some View {
        VStack {
            CountView(count: $count)
            Text("My Count: \(count)")
            Button("Show My Count"){print("\(self.count)")}
        }
    }
}
struct CountView: View {
    @Binding var count: Int
    var body: some View {
        VStack {
            Button("Increase count"){self.count += 1}
            Text("Count = \(count)")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...