@ViewBuilder2

작성일

지난 포스팅에 이어 다른 방식은 어떻게 사용하는지 알아보려고한다.

우선 타입에 따라 다른 뷰를 보여주려고한다.

struct LocalViewBuilder: View {

  enum viewType {
    case one
    case two
    case three
  }

  let type: ViewType

  var body: some View {
    VStack {

        if type == .one {
           Text("One!")
        } else if type == .two {
           VStack {
             Text("Two")
           }
        } else if type == .three { 
            Image(systemName: "heart.fill")
        }
    } // VStack
  } // body
}

이런식의 코드를

body: some View {
  VStack {
    if type == .one {
      viewOnew
    } else if type == .two {
      viewTwo
    } else if type == .three {
      viewThree
    }
  }
}

private var viewOne: some View {
  Text("One!")
}

private var viewTwo: some View {
 Text("Two")
}
private var viewThree: some View {
 Image(systemName: "heart.fill")
}

이런식으로 작성해줄 수 있다. 하지만 이코드를 더 줄일려면(본문에서 줄일라면)

var body: some View {
  VStack {
    headerSection
  }
}

@ViewBuilder private var headerSection: some View {
  if type == .one {
    viewOnew
  } else if type == .two {
    viewTwo
  } else if type == .three {
    viewThree
  }
}

이런식으로 작성해 나가면 된다 그러면 본문에선
headerSection 하나로 작성해 주면 된다.
이걸 더 깔끔하게 만들려면 switch를 사용해 주면 된다.

@ViewBuilder private var headerSection: some View {
  switch type {
    case .one:
      viewOnew
    case .two:
      viewTwo
    case .three:
      viewThree
  }
}