Передача значений переменных между разными представлениями в SwiftUI - PullRequest
0 голосов
/ 08 мая 2020

Я абсолютный новичок, так что, пожалуйста, не откажите мне в удовольствии. Я просмотрел несколько ответов как в Stack Overflow, так и в других местах, которые, как я думал, могут дать мне решение, но, похоже, ни один из них не работает.

Что я действительно хочу сделать, так это передать значение вычисленного переменная от одного представления к другому.

В качестве плохой альтернативы, поскольку это потребовало бы большой доработки, я мог бы передать значения переменных, над которыми работает вычисление, во второе представление (предпочтительнее лист, но я мог бы использовать другое представление) и вместо этого выполните вычисления.

Я пробовал привязку, ObservableObject, Observed var, Published var, но, похоже, ничего не работает.

Базовые переменные, используемые для вычислений, получены из представления списка в первом представлении с использованием @State, поэтому каждая переменная является переменной @State. Есть семь переменных, каждая со своим собственным массивом.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вот пример, если вы не хотите, чтобы изменял значение в DetailView:

struct ContentView: View {
    @State private var currentCount = 0

    var body: some View {
        NavigationLink(destination: DetailView(count: currentCount)) {
            Text("Tap Here!")
        }
    }
}

struct DetailView: View {
    var count: Int

    var body: some View {
        Text("\(count)")
    }
}

Вот пример, если вы хотите для изменения сделать значение изменяемым с DetailView. В этом случае необходимо использовать @Binding:

struct ContentView: View {
    @State private var currentCount = 0

    var body: some View {
        VStack {
            Text("\(currentCount)")

            NavigationLink(destination: DetailView(count: $currentCount)) {
                Text("Tap Here!")
            }
        }
    }
}

struct DetailView: View {
    @Binding var count: Int

    var body: some View {
        VStack {
            Text("\(count)")

            Button(action: {
                self.count += 1
            }) {
                Text("Increase!")
            }
        }
    }
}
0 голосов
/ 08 мая 2020

Вот самый простой способ сделать это только для одной переменной за раз. Чтобы сделать больше, следуйте целому руководству по ObservedObject, пока не усвоите эту концепцию. Я не могу создать приложение без ObservedObject. Или могу, но это как связать одну руку за спиной. В любом случае, для одного:

В подпредставлении напишите переменную следующим образом:

@Binding var passedDownList: [Item]

Затем вы вызываете подвид, используя синтаксис $, как для текстового поля и прочего.

MySubView(passedDownList: $myList)

Вот. Массив будет синхронизирован c между двумя представлениями.

...