SwiftUI에는 개발을 더욱 편리하게 해주는 여러 기능이 있습니다. 그 중 PreviewProvider는 현재 편집하는 View를 실시간으로 보여주어, 개발자로 하여금 정확하게 기능을 구현하고 있는지를 확인하기 쉽게 해줍니다.
또한, 아래 사진과 같이 동시에 각각 다른 특징(다크모드, 언어 등)을 가진 Preview를 제공합니다.
그렇다면 다른 View의 @State
와 연결된 @propertyWrapper
인 @Binding
의 경우는 PreviewProvider에서 어떻게 표현될까요? 막연히 상상했을 때에는 실제 View에서와 같이 @Binding var foo: Bool
와 같이 선언하고 인자로서 넘겨주면 될 것이라고 생각했지만, struct View이름_Previews
는 View가 아닌 PreviewProvider였기 때문에 변수가 생성되지 않았습니다.
따라서 "swiftUI binding preview"라고 구글링한 결과 Stack Overflow: SwiftUI @Binding Initialize라는 글에서 답을 찾을 수 있었습니다.
위의 사진과 같이, PreviewProvider는 다양한 상황에서의 View를 미리 보여주는 것이기 때문에, 다른 View에서 값이 변화하는 것에 따라 Preview를 새로 그리는 데에는 무리가 있습니다.
그렇기 때문에 PreviewProvider에서는 constant(_:)
라는 Binding
의 타입 메서드를 통해서 각 Binding 변수의 특정 값을 고정 값으로 제공하여, 해당 값에 따른 Preview를 확인할 수 있습니다.
Apple constant(_:) 공식문서에서 확인할 수 있듯, constant는 원하는 값을 인자로 넘겨주기만 하면 해당 값을 Binding
타입으로 return합니다. 아래에 해당 메소드를 활용하여 PreviewProvider를 작성한 예시를 남기며 글 마치겠습니다.
감사합니다~