如何";“什么也不做”;在SwiftUI中的三元运算符中?
这是我的代码:如何";“什么也不做”;在SwiftUI中的三元运算符中?,swift,swiftui,Swift,Swiftui,这是我的代码: struct GameView : View { @State private var clicked1 : Bool = false var body: some View { HStack { VStack { Image("shape0") .overlay(clicked1 ?
struct GameView : View {
@State
private var clicked1 : Bool = false
var body: some View {
HStack {
VStack {
Image("shape0")
.overlay(clicked1 ?
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7) : pass()
)
.onTapGesure {
print("Image is clicked")
}
}
}
}
}
但是在pass()
附近会发生一些错误
当变量clicked1
为false
时,我不想执行任何操作
如何修复它?
.overlay
需要一些视图类型作为参数
如果要使用三元运算符,它必须返回相同的类型。对于“不执行任何操作”视图,请使用EmptyView()
,但由于它必须是相同的类型,因此一种方法是使用AnyView
包装每个条件视图:
Image("shape0")
.overlay(clicked1
? AnyView(RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7))
: AnyView(EmptyView())
)
编辑:
实际上-可选
也符合视图
,因此这是一种比上面更好的方法-即只返回您想要的视图或无
:
Image("shape0")
.overlay(clicked1 ? RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7) : nil)
另一种方法是使用返回条件视图的computed属性:
var body: some View {
Image("shape0")
.overlay(overlayView)
}
@ViewBuilder
var overlayView: some View {
if clicked1 {
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7)
}
}
.overlay
需要某些视图类型作为参数
如果要使用三元运算符,它必须返回相同的类型。对于“不执行任何操作”视图,请使用EmptyView()
,但由于它必须是相同的类型,因此一种方法是使用AnyView
包装每个条件视图:
Image("shape0")
.overlay(clicked1
? AnyView(RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7))
: AnyView(EmptyView())
)
编辑:
实际上-可选
也符合视图
,因此这是一种比上面更好的方法-即只返回您想要的视图或无
:
Image("shape0")
.overlay(clicked1 ? RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7) : nil)
另一种方法是使用返回条件视图的computed属性:
var body: some View {
Image("shape0")
.overlay(overlayView)
}
@ViewBuilder
var overlayView: some View {
if clicked1 {
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7)
}
}
这也会起作用,诀窍是使用
Group
使用三元:
Image("shape0")
.overlay(
Group {
clicked1 ?
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7)
: nil
}
)
使用if:
Image("shape0")
.overlay(
Group {
if clicked1 {
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7)
}
}
)
这也会起作用,诀窍是使用
Group
使用三元:
Image("shape0")
.overlay(
Group {
clicked1 ?
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7)
: nil
}
)
使用if:
Image("shape0")
.overlay(
Group {
if clicked1 {
RoundedRectangle(cornerRadius:10)
.stroke(Color.yellow, lineWidth: 7)
}
}
)
这回答了你的问题吗@SergedeGossondeVarennes这不是一个Java问题。这回答了你的问题吗@Sergedegossondevarenes这不是一个Java问题。你忘记了括号-
AnyView(EmptyView())
你忘记了括号-AnyView(EmptyView())
这提醒了我可选:视图
-也就是说,可选视图就是视图,因此不需要组
这提醒我,可选:视图
-即可选视图是视图,因此不需要组