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 변수에서 이를 인지하고 해당 값에 따른 ..

iOS - MVVM 패턴
Language/Swift 2022. 11. 5. 21:04

MVVM (Model - View- ViewModel) Model 데이터, 네트워크 로직, 비즈니스 로직등을 담으며 데이터를 캡슐화하는 역할을 맡고 있다. MVC 패턴의 Model과 크게 다르지 않다. View 사용자에게 데이터를 보여주거나 UI를 담당한다. Model을 직접 알고 있어서는 안된다. View는 ViewModel로부터 데이터를 가져와서 표현한다. 사용자와 View의 상호작용을 수신하고 이에 대한 처리를 ViewModel에 부탁한다. 보이는 부분에 대한 설정을 스스로 직접한다. ViewModel View로 부터 전달받는 요청을 처리할 로직을 담고 있으며, Model에 변화가 생기면 ViewModel이 View에 notification을 보낸다. (데이터의 변화를 View가 알아챌 수 있도록 ..

iOS - MVC 패턴
Language/Swift 2022. 11. 5. 19:26

MVC (Model - View- Controller) Model : 앱이 가지는 데이터들을 정의하고 비즈니스 로직을 갖고 있다. View : 사용자에게 데이터를 보여주거나 UI를 담당한다. Controller : Model과 View의 중간다리 역할. View로부터 사용자의 action을 받아 Model에게 어떤 작업을 해야 하는지 알려주거나, Model의 데이터 변화를 View에게 전달하여 View를 어떻게 업데이트할지 알려준다. MVC 패턴에서 각 영역의 커뮤니케이션 Controller는 Model과 View에 직접 지시할 수 있지만 Model과 View는 Controller에 직접적으로 알릴 수 없다. View에서 사용자의 action이 발생하였을 때 Controller에 알리는 2가지 방법 1...

iOS - View Controller 생명주기
Language/Swift 2022. 11. 5. 03:26

View Controller의 생명주기 앱은 보통 하나 이상의 화면들로 구성되어 있다. 즉 앱에는 하나 이상의 'View Controller'가 존재하는 것이다. 각각의 뷰 컨트롤러는 생명주기를 갖고 있다. 뷰 컨트롤러는 다음과 같은 생명주기를 가지고 있다. 1. viewDidLoad() : view가 메모리에 로드됐을 때 딱 한번 호출되는 메서드 2. viewWillApear(_:) : view가 화면에 표시되기 전에 호출되는 메서드. view controller가 화면에 나타날 때 마다 반복 실행된다. 3. viewDidAppear(_:) : view가 화면에 나타난 직후에 실행되는 메서드. (화면에 적용될 애니메이션을 그려준다.) 4. viewWillDisappear(_:) : view가 사라지기 ..