0

我正在尝试在类型为 :View 的结构内的 If 语句中设置 @State var 的值,如下所示:

struct Name: View {
  @State someVar: Int = 0
    var body: some View {
      VStack {
        if this > that {
          someVar = 1

但是当我这样做时,我得到了错误:“类型'()'不能符合'视图';只有结构/枚举/类类型可以符合协议”。如果我使用一个可以满足我需要的类方法,如下所示:

    if this > that {       
      someClass.doIt()
    }

我犯了同样的错误。

这样做的正确方法是什么?

4

1 回答 1

0

您不能将这样的逻辑代码放在您的内部body——您所能拥有的只是输出视图的代码。

所以,你可以这样做:

var body: some View {
  if this > that {
    Text("This")
  } else {
    Text("That")
  }
}

因为这会导致 View ( Text) 被渲染。但是,在您的示例中,您只是在做作业。

这必须在单独的函数中或在视图中直接呈现的内容之外的闭包中完成。

所以:

func testThisThat() {
  if this > that {
   someVar = 1
  }
} 

var body: some View {
  Button(action: {
   testThisThat()
  }) {
   Text("Run test")
  }
}

在上面,您的逻辑在视图层次结构之外的闭包中运行,并且 aButton被渲染到视图中。

如果您提供有关您要做什么的更多细节,也许可以澄清答案,但这就是错误的根源。

正如评论中所建议的,您还可以在 中运行逻辑代码onAppear,如下所示:

var body: some View {
  VStack {
   //view code
  }.onAppear {
   //logic
    if this > that {
      someVar = 1
    } 
  }
}
于 2021-02-08T20:24:05.700 回答