SwiftUi 工作表第一次点击时是空白的,但之后可以正常工作

use*_*668 6 swift swiftui swiftui-ontapgesture

我有一张放在 foreach 循环之外的表。当我第一次单击 Tapgesture 时,结果为空白,第一次之后我点击的每一行都获得了正确的数据。我已阅读ForEach 内的 Sheet 不会循环遍历 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)" )
                  }
             }

        }
Run Code Online (Sandbox Code Playgroud)

小智 9

要解决此问题,一种解决方案是按以下方式实现图纸修改器:

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


Anu*_*ugh 7

显然,解决此问题的方法之一是使用StateObject而不是State. 这是一篇 Medium 文章,演示了该解决方案