Pull to refresh

Comments 2

Всем HI!
У кого-нибудь получилось решить?
Я кнопки и вью создал, но при нажатии любой кнопки, у меня кроме верхнего вью, синхронно меняются количество нажатие и всех остальных кнопок. Уже второй день голову ломаю.

import SwiftUI

struct ContentView: View {
    @State private var totalCounter: Int = 0
    
    var body: some View {
        VStack {
            Text("\(totalCounter)")
            .padding()
            .font(.system(size: 40))
            .background(.green)
            .clipShape(Ellipse())
            ButtonView(color: .blue, totalCount: $totalCounter)
            ButtonView(color: .black, totalCount: $totalCounter)
            ButtonView(color: .yellow, totalCount: $totalCounter)
        }
    }
}

#Preview {
    ContentView()
}

struct ButtonView: View {
    var color: Color
    @State var counter: Int = 0
    @Binding var totalCount: Int
    
    var body: some View {
        Button {
            counter += 1
            totalCount += 1
        } label: {
            Text("\(counter)")
                .padding()
                .font(.system(size: 60))
                .tint(.white)
                .background(color)
                .clipShape(Circle())
        }
    }
}

Как было сказано в статье @Stateиспользуется для локальной работы внутри представления, поэтому counter внутри ButtonView его и использует, а вот totalCount будет передаваться в другое представление его мы определяем как @Binding. В ContentView же мы определяем totalCount как @State, поскольку это значение используется в том же представлении.
Фактически, удивительным я нашел тот факт, что мы можем использовать то же имя переменной в разных представлениях и он будет хранить общее значение. Поправьте, если ошибся

Sign up to leave a comment.

Articles