Лист SwiftUi пуст при первом касании, но после этого работает правильно

У меня есть лист, который я помещаю вне цикла foreach. Когда я нажимаю на Tapgesture в первый раз, результаты пусты, после первого раза я получаю правильные данные для каждой строки, которую я нажимаю. Я читал Лист внутри ForEach не перебирает элементы SwiftUI, но он все еще не работает, это мой код. Если вы посмотрите на мой код, у меня есть переменная состояния с именем sharePost , которая при нажатии получает значение value.post , а затем переключатель shareSheet устанавливается в значение true . По какой-то причине я не могу получить значение при первом нажатии. У кого-нибудь есть предложения по устранению этой проблемы

      struct TimeLineView: View {
    @Binding var model: [MainModel]
    @Binding var isMainView: MainViewEnum
    @State var shareSheet = false
    @State var PostIDState = 0
    @State var sharePost = ""

var body: some View {
        ZStack
        {

         let result = model.sorted {
                        $0.id! > $1.id!
                    }
                    
                    ForEach(result) { value in
                   HStack {
                            Image("share")
                              .resizable()
                              .frame(width: 28, height: 28)
                              .onTapGesture {
                                            sharePost = value.post
                                            shareSheet.toggle()
                     
                                             }

                        }
                    }

                 }.sheet(isPresented: $shareSheet) 
                  {
                     ShareView(message:"\(sharePost)" )
                  }
             }

        }

2 ответа

Чтобы решить эту проблему, одним из решений является реализация модификатора листа следующим образом:

      .sheet(isPresented: Binding(
                get: { shareSheet },
                set: { shareSheet = $0 }
            )) {
                ShareView(message:"\(sharePost)" )
            }

По-видимому, одним из обходных путей для этого является использование StateObjectвместо State. Вот статья на Medium, демонстрирующая решение .

Другие вопросы по тегам