Swiftui 迅捷是不是超级贪婪?

Swiftui 迅捷是不是超级贪婪?,swiftui,gesture,Swiftui,Gesture,Swift 5,iOS 13 如果我将第二个手势更改为长按,但将两个手势都保留为“点击”,则此代码将起作用,并且它不会显示红色框?我疯了吗 import SwiftUI struct SwiftUIViewQ: View { @State var swap: Bool = false var body: some View { VStack { if swap { SquareView(fillColor: Color.red) .onTapGesture

Swift 5,iOS 13

如果我将第二个手势更改为长按,但将两个手势都保留为“点击”,则此代码将起作用,并且它不会显示红色框?我疯了吗

import SwiftUI

struct SwiftUIViewQ: View {
@State var swap: Bool = false
var body: some View {
  VStack {
    if swap {
      SquareView(fillColor: Color.red)
      .onTapGesture {
        self.swap = false
      }
    } else {
      SquareView(fillColor: Color.blue)
      .onTapGesture {
        self.swap = true
      }
    }
  }
}
}

struct SquareView: View {
@State var fillColor: Color
var body: some View {
    Rectangle()
      .fill(fillColor)
      .frame(width: 128, height: 128)
      .onAppear {
        print("fillColor \(self.fillColor)")
      }
}
}

奇怪的是,如果我在第一个视图中添加一个onAppear,它会起作用。。。如果我在第二次添加一个onAppear,它会再次破坏它。

var fillColor不需要@State,只要删除它,它就会正常工作

struct SquareView: View {
    var fillColor: Color
    var body: some View {
        Rectangle()
          .fill(fillColor)
          .frame(width: 128, height: 128)
          .onAppear {
            print("fillColor \(self.fillColor)")
          }
    }
}

仅通过copy/pasteOk就可以使用Xcode 12,但为什么将fillColor设置为状态会破坏它。@user3069232我认为这是因为您不应该从另一个视图初始化状态变量,您可以使用init或绑定进行初始化