Language/Swift

[Swift] 불투명한 유형을 some으로 반환 그리고 Scene

jaewpark 2022. 9. 7. 10:00

swiftUI를 배우기 시작하면서 some이 무엇이길래, 사용이 되는 걸까?

궁금증을 시작으로 찾아보았습니다.

 

특정 유형의 반환이 아닌 some 을 이용해서 유형값을 특정짓지 않아도 됩니다.

하단 예제의 함수는 사다리꼴의 기본 유형을 노출하지 않고 사다리꼴을 반환을 합니다

struct Square: Shape {
    var size: Int
    func draw() -> String {
        let line = String(repeating: "*", count: size)
        let result = Array<String>(repeating: line, count: size)
        return result.joined(separator: "\n")
    }
}

func makeTrapezoid() -> some Shape {
    let top = Triangle(size: 2)
    let middle = Square(size: 2)
    let bottom = FlippedShape(shape: top)
    let trapezoid = JoinedShape(
        top: top,
        bottom: JoinedShape(top: middle, bottom: bottom)
    )
    return trapezoid
}
let trapezoid = makeTrapezoid()
print(trapezoid.draw())

 

도형을 그리는 함수를 반환한다고 하면 shape 프로토콜에 포함되는 것들을 반환할 수 있게 됩니다.

swift 에서는 값 유형에 대해서 명시를 해야만 하는데, 불투명한 유형을 some 사용함으로써 더 확장해서 사용할 수 있게 되는 거 같습니다.

 


Scene (참고)

: 앱의 일부를 구성하는 사용자 인터페이스 그룹을 선언

 

시스템에 의해 관리되는 수명 주기가 있는 앱 사용자 인터페이스의 일부를 나타내는데, 앱 인스턴스는 이것을 포함된 Scene를 보여주며, 각 Scene는 보기 계층의 루트 요소로 작용합니다.

시스템은 Scene의 유형, 플랫폼 및 컨텍스트에 따라 다른 방식으로 보여줍니다. 한 Scene가전체 디스플레이, 디스플레이의 일부, 창, 창의 탭 등을 채울 수 있습니다. 사용자가 앱에서 단일 Document Group 선언을 기반으로 여러 문서를 동시에 열 때처럼 한 번에 두 개 이상의 Scene 인스턴스를 표시할 수 있는 경우도 있습니다.

 

WindowGroup을 앱에서 제공하는 보기 계층의 컨테이너로 사용합니다. 그룹의 콘텐츠로 선언하는 계층은 앱이 해당 그룹에서 생성하는 각 창의 템플릿 역할을 합니다.

 

HStack, VStack, ZStack

  • HStack은 Gneric Structure이며, 자식들을 수평으로 배열하는 뷰입니다.
  • VStack은 Gneric Structure이며, 자식들을 수직으로 배열하는 뷰입니다.
  • VStack은 Gneric Structure이며, 자식들을 오버레이하고 두 축으로 배열하는 뷰입니다. (서로서로 겹치는 형태)