Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";“什么也不做”;在SwiftUI中的三元运算符中?_Swift_Swiftui - Fatal编程技术网

如何";“什么也不做”;在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())
这提醒了我
可选:视图
-也就是说,可选视图就是视图,因此不需要
这提醒我,
可选:视图
-即可选视图是视图,因此不需要