본문 바로가기
코딩 공부/Swift

SwiftUI 에서 some View 를 사용하는 이유

by JH-M 2023. 3. 2.

some View 는 Swift의 opaque return types 라는 기능을 활용하여, 동일한 뷰 타입의 여러 하위 뷰를 포함하는 View 를 반환하기 위한 문법입니다.

some View 를 사용하면 반환되는 뷰 타입이 명확하지 않아도 되기 때문에, 간결한 코드 작성과 유지보수가 용이해집니다. 또한, 반환되는 뷰 타입이 구체적으로 명시되지 않아도, 컴파일러가 타입 체크를 할 수 있습니다.

아래는 some View 를 사용한 간단한 예시입니다.

struct ContentView: View {
    var body: some View {
        if condition {
            Text("Condition is true.")
        } else {
            Image(systemName: "xmark.circle")
        }
    }
}

위 코드에서 body 속성은 some View 로 선언되어 있습니다. 이는 반환 타입이 실제로 무엇인지 모르더라도, 모든 가능한 뷰의 타입을 포함할 수 있다는 의미입니다.

if 문을 사용하여, condition 이 참일 때는 Text 뷰가, 거짓일 때는 Image 뷰가 반환됩니다. 이처럼 some View 는 반환될 뷰의 타입을 명확히 할 필요 없이, 여러 종류의 뷰를 반환할 수 있습니다.

 

 

some View는 SwiftUI에서 매우 중요한 역할을 합니다. some View는 제네릭 형식으로 뷰의 반환 유형을 추상화하는 방법을 제공합니다. 이는 많은 재사용 가능한 뷰와 뷰 레이아웃을 만드는 데 유용합니다.

some View는 모든 뷰의 공통 부분을 추상화하고, 이를 다른 뷰에서 재사용할 수 있는 유연한 방법을 제공합니다. some View는 실제로 뷰를 만들지는 않습니다. 대신, 이를 뷰 빌더에 전달하여 뷰를 만듭니다.

some View는 또한 동일한 뷰 유형을 반환하지만 다른 제네릭 인수를 가진 여러 개의 뷰를 래핑하는 데 사용될 수 있습니다. 예를 들어, 두 개의 Text 뷰를 래핑하는 뷰는 다음과 같이 정의할 수 있습니다.

struct DoubleTextView<Content: View>: View {
    let content: Content

    init(@ViewBuilder content: () -> Content) {
        self.content = content()
    }

    var body: some View {
        VStack {
            content
            content
        }
    }
}

이러한 some View 유형의 사용으로 SwiftUI는 컴파일 타임에 뷰를 조합하고, 컴파일러는 뷰 유형과 뷰 계층 구조에 대한 추가 검사를 수행할 수 있습니다. 이를 통해 SwiftUI는 개발자가 앱을 더 쉽게 구조화하고, 뷰를 더 간결하고 유연하게 구성할 수 있도록 도와줍니다.

댓글