首页 > 解决方案 > 这个简单的 SwiftUI 示例有什么问题?

问题描述

我有这个简单的 SwiftUI 应用程序,但它的行为不符合预期。

该应用程序由一个简单地显示一些问候消息的视图和一个触发工作表呈现的工具栏按钮组成。在演示之前,@State属性 ( tmpEvent) 被设置为所需的值。

一次显示工作表时,它不显示新分配的值,而是显示初始化值。在工作表的所有后续演示文稿中,它都按预期工作。

我在这里想念什么?

import SwiftUI

struct ContentView: View {
  @State private var presentingSheet = false
  @State private var tmpEvent = Event(desc: "default Event")
  @State private var counter = 0
  
  
  var body: some View {
    NavigationView {
      VStack {
        Text("Hello Test App")
      }
      .toolbar {
        Button(action: showSheet) {
          Label("Open sheet", systemImage: "plus")
        }
      }
      .sheet(
        isPresented: $presentingSheet,
        onDismiss: { tmpEvent = Event(desc: "onDismiss Event") }
      ) {
        NavigationView {
          VStack {
            Text("event: \(tmpEvent.desc)")
          }
          .navigationBarTitleDisplayMode(.inline)
          .navigationTitle(tmpEvent.desc)
          .toolbar {
            Button(action: { presentingSheet = false }) {
              Label("Close", systemImage: "xmark")
            }
          }
        }
      }
    }
  }
  
  private func showSheet() {
    counter += 1
    tmpEvent = Event(desc: "new Event \(counter)")
    presentingSheet = true
  }
}

更新:这是Event结构

struct Event {
  var desc: String
}

如果你想玩这个例子,你可以从GitHub下载。

标签: iosswiftswiftui

解决方案


推荐阅读