View Modifier?

What is View Modifier?

Swift 공식문서: A modifier that you apply to a view or another view modifier, producing a different version of the original value.

번역해보자면 뷰 또는 다른 뷰 수정자에 적용하여 원래 다른 값의 버전을 성하는 수정자 라는 뜻이다

Custom View Modifier

UI개발을 하다보면 중복되는 디자인과 반복되는 스타일 같은 부분들이 반드시 발생한다. UIKit 에선 SubClassing으로 이를 해결했지만 SiwtUI에서 ViewModifier 를 만들어줌으로서 재사용성 높은 UI코드를 만들 수 있다

Text에 곡선의 테두리를 넣고, 뒷배경과 라인에 색상을 넣어 박스형태로 만드는 ViewModifier를 만들어보자

struct RectStyleModifier: ViewModifier {
    var fillColor: Color?
    var lineColor: Color?
    var cornerRadius: CGFloat = 15
    
    func body(content: Content) -> some View {
        content
            .padding(5)
            .background {
                ZStack {
                    if let fillColor {
                        RoundedRectangle(cornerRadius: cornerRadius)
                            .foregroundColor(fillColor)
                    }
                    if let lineColor {
                        RoundedRectangle(cornerRadius: cornerRadius)
                            .strokeBorder(lineColor)
                    }
                }
                
            }
            
    }
}

Usage

위에서 만든 RectStyleModifier를 Text에 적용시켜보자

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
                .modifier(RectStyleModifier(fillColor: .red,
                                            lineColor: .red,
                                            cornerRadius: 15))
        }
    }
}

ViewModifier1

요런식으로 나오게된다

잘 활용하면 중복되는 디자인에 적용하여 생산성을 엄청 높일 수 있겠다