Swiftui 迅捷是不是超级贪婪?
Swift 5,iOS 13 如果我将第二个手势更改为长按,但将两个手势都保留为“点击”,则此代码将起作用,并且它不会显示红色框?我疯了吗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
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或绑定进行初始化