SwiftUI - Spacer()
Language/SwiftUI 2022. 12. 6. 04:33

Spacer() 정의 포함하는 스택 레이아웃의 주요 축을 따라 확장되거나, 스택에 포함되지 않은 경우 두 축 모두에서 확장되는 유연한 공간 View 간의 간격을 띄우고 싶을 때 사용 Spacer는 기본적으로 View와 View 사이를 사용 가능한 전체 공간을 띄움 Spacer를 n개를 사용하면 Spacer가 띄우는 크기가 n등분 됨 Spacer 여백 크기 지정 방법 1. minLength - Spacer 여백의 최소 보장되는 크기 Spacer(minLength: 100) 2. frame modifier - Spacer 여백의 크기를 직접 지정 - Spacer() .frame(width: 200) Spacer() .frame(width: 200) Spacer로 Safe Area로 확장되지 않는 방법 1. ..

SwiftUI - Stack(HStack, Vstack, ZStack)
Language/SwiftUI 2022. 12. 6. 04:21

HStack(수평) 내부에 선언된 View들을 Leading에서 Trailing으로 배치한다. (배치 방향 : Leading -> Trailing) VStack(수직) 내부에 선언된 View들을 Top에서 Bottom으로 배치한다. (배치 방향 : Top -> Bottom) ZStack 내부에 선언된 View들을 겹쳐서 두 축으로 배치한다. (먼저 선언된 View가 뒤에 배치됨) Stack 크기 변경 Stack의 크기는 내부 View를 표시하기 위한 최소한의 크기로 표시된다. (너비와 폭이 가장 큰 View에 의해서 프레임이 맞춰진다.) Stack의 Frame을 직접 지정해주고 싶을 경우 .frame이라는 modifier를 이용해서 직접 설정해줄 수 있음 HStack { // … } .frame(widt..

SwiftUI - ContentView, 생명주기
Language/SwiftUI 2022. 12. 6. 03:45

ContentView View를 채택하고 있는 ContentView 구조체 안에 body라는 프로퍼티가 있어야 한다. 이 body가 ContentView의 최상위 View의 역할 이 body는 연산 프로퍼티로 구현 body는 단 한 개의 View만 반환해야 한다. Stack / Group 등을 사용해서 여러 개의 뷰들을 하나의 뷰로 감싸서 하나의 View로 리턴해야 한다. View의 생명주기 관리 onAppear(=ViewDidAppear), onDisappear(=ViewDidDisappear) 라는 modifier를 사용 struct ContentView: View { var name = "Sodeul" var body: some View { VStack { Text("Hello, \(name)!")..

SwiftUI - some
Language/SwiftUI 2022. 12. 6. 03:38

some (수식어) 정의 : 해당 키워드가 반환 타입 앞에 붙을 경우, 해당 반환 타입이 불투명한 타입(Opaque Type)이라는 것을 나타낸다. 불투명한 타입 = 역 제네릭 타입(reverse generic types) 제네릭 타입 func swap(a: inout T, b: inout T) { } - 타입에 의존하지 않는 범용 코드를 만들 때 사용 - 함수를 작성할 당시엔 실제 어떤 타입이 들어올지에 대해서는 당연히 알 수 없음 - 제네릭 함수의 실제 타입에 대해서는 함수를 호출하는 외부에서 알 수 있음 불투명한 타입(Opaque Type) struct Apple {} struct Cherry {} protocol GiftBox { associatedtype giftType var gift: gif..

SwiftUI - State, Binding
Language/SwiftUI 2022. 12. 6. 03:09

SwiftUI - SwiftUI 앱 라이프 사이클을 사용하는 앱은 App 프로토콜을 준수하는 구조를 가지고 있다. - 구조체의 body 속성은 하나 이상의 scene을 리턴한다. - 차례로 표시할 콘텐츠를 제공한다. @main @main 속성은 앱에서 처음 실행되는 코드인 진입점(entry point) @State @State는 값이 변경되면 뷰는 해당 value 의 appearance 를 무효화 하고 다시 body 값을 계산 (=뷰는 항상 최신화된 값을 가짐) @Binding @Binding을 사용해 @State로 선언된 속성을 다른뷰에서 사용 사용시에는 앞에 $를 사용해 Bining 변수임을 나타낸다. @State로 선언된 속성에 변경이 생기면 @Binding 변수에서 이를 인지하고 해당 값에 따른 ..