1

如何根据调用视图时提供的输入参数 categorySize 在视图中更改 @State 变量大小?

我想在 categorySize == .Large 时将大小更改为 140,在 categorySize == .Small 时更改为 40。

enum ExampleEnum {
     case Large
     case Small
}

struct TestView: View {

   let categorySize: ExampleEnum
   @State private var size: CGFloat = 92

   var body: some View {
   Image(name: "TestImage")
      .resizable()
      .frame(width: size, height: size)
   }
}

TestView(categorySize: .Small)

我通过 if 语句尝试过,但这并不能解决问题:

struct TestView: View {

   let categorySize: ExampleEnum
   @State private var size: CGFloat = 92

   var body: some View {

   if categorySize == .Large {      <=== Not working
      $size = 140
   } else if categorySize == .Small {
      $size = 40
   }

   Image(name: "TestImage")
      .resizable()
      .frame(width: size, height: size)
   }
}

我知道我可以在调用视图时传递 size 参数。但是,我只想传递 categorySize,然后让视图逻辑处理视图中的 size 变量。

4

1 回答 1

3

这是可能的方法

struct TestView: View {

    let categorySize: ExampleEnum

    var body: some View {

        var size: CGFloat  = 92
        if categorySize == .Large {
            size = 140
        } else if categorySize == .Small {
            size = 40
        }

        return Image(name: "TestImage")
            .resizable()
            .frame(width: size, height: size)
    }
}
于 2020-01-12T18:07:16.067 回答