SwiftUI - изменение переменной представления на основе входного параметра

Как изменить размер переменной @State в представлении на основе входного параметра categorySize, предоставленного при вызове представления?

Я хотел бы изменить размер на 140, когда categorySize == .Large, и на 40, когда categorySize == .Small.

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

Я знаю, что могу передать параметр размера при вызове представления. Однако я хотел бы передать только categorySize, а затем логику представления обрабатывать переменную размера в представлении.

1 ответ

Решение

Вот возможный подход

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)
    }
}
Другие вопросы по тегам