@state变量更改后视图未更新

时间:2019-09-19 14:08:13

标签: swiftui

    struct Flashcard : View {
      @State var frontText = newArray[randomNum].kana
      @State var backText = newArray[randomNum].romaji

      var body: some View {
        let zstack = ZStack {
          Frontside(kanatext: frontText)
            .background(Color.yellow)
            .rotation3DEffect(.degrees(self.showResults ? 180.0 : 0.0), axis: (x: 0.0, y: 1.0, z: 0.0))
            .zIndex(self.showResults ? 0 : 1)
            .frame(width: 300, alignment: .center)
            .cornerRadius(25)
         }
      }

public struct Frontside: View
{
    @State public var kanatext: String = ""

    public var body: some View
    {
        Text(self.kanatext)
            .font(.title)
            .fontWeight(.black)
            .padding(32)
    }
}

在上面的代码片段中,当我更新@State var frontText时,我希望视图刷新并显示frontText。但是由于某种原因,当在我的Frontside结构中使用新的frontText时,它不会显示。如果仅在视图中打印Text(frontText),它将始终随着变量更改而刷新。每当frontText更新时,它无法正确刷新,我缺少什么?谢谢。

1 个答案:

答案 0 :(得分:0)

您必须将kanatext声明为@Binding

@Binding public var kanatext: String

,然后将绑定传递给您的状态,该状态由初始化程序中的父视图拥有:

Frontside(kanatext: $frontText)

基本上,当您在视图@State中声明变量时-表示该视图拥有该视图,并且其绘制方式取决于该视图。当您希望此状态影响另一个视图时,您需要将其作为绑定($)传递给它。如果它们都引用与@State相同的变量,则它们都是自己的独立副本,因为它们都是值类型。

相关问题