SwiftUI-根据输入参数更改View变量

时间:2020-01-12 17:53:43

标签: swift swiftui swiftui-state

如何基于调用视图时提供的输入参数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变量。

1 个答案:

答案 0 :(得分:2)

这是可行的方法

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)
    }
}