SwiftUI 스터디 1주차 !!
참고로 SwiftUI는 맥북이 없어도! 아이패드에 Playgrounds를 설치해서 코드를 실행해 볼 수 있다.
공부 자료 - Apple 공식 문서
(간단요약) step1 ~step7: 프로젝트를 생성하는 방법과 기본 세팅에 대해서 설명해준다.
Step5
SwiftUI에서 view 파일이 기본적으로 두 구조체로 만들어진다. 첫번째 구조체는 View protocol를 준수하고 view의 콘텐츠와 레이아웃을 묘사한다. 두번째 구조체는 해당 미리보기에 대한 view이다.
그렇다면 View Protocol 이란??
성능 🛠
Struct는 Class보다 단순하고 빠른 특징이 존재
UIView같은 경우에는, constrant, layer 등 많은 property와 메서드를 가진 클래스에의 subclass인데, UIView의 서브클래스들은 모두 UIView의 속성을 그대로 가져가야만 하는 구조 ( 애플 문서만 봐도, UIView관려 속성이 200개 넘게 존재)
SwiftUI에서는 상속을 대신하여 ViewModifier 개념을 사용하여 컴포넌트화 할 수 있도록 제공
가변성을 최소화 (함수형 프로그래밍의 핵심) 🩹
메모리릭 방지 🧰
(간단요약) step1 ~step6: Text View 요소 변경하는 방법
Show SwiftUI Inspector 보는 법!! => command + click
SwiftUI Inspector
: 여기서 들어가야 하는 Text or Font or Color 등을 바꿀 수 있고, Inspector에서 요소르 바꾸면 코드가 알아서 변경된다!!
(간단요약) step1 ~step9: SwiftUI에서 레이아웃과 컨텐츠 등을 body property 안에 구성하는데, body property는 하나의 뷰만 반환하기 때문에!! stack안에 여러 개의 view를 combine하거나 embed 해야한다.
(방법: horizontally, vertically, or back-to-front)
Embed in VStack
& Embed in HStack
VStack(alignment: .leading)
코드에 해당 문장이 생성된다.Spacer()
HStack {
Text("Joshua Tree National Park")
.font(.subheadline)
Spacer()
Text("California")
.font(.subheadline)
}
```
(간단요약) step1 ~step7: 이미지 추가하는 방법을 배우고 mask, border 그리고 drop shadow까지 만드는 방법에 대해서 설명해준다.
Image("imageName").frame(witdh: 200, height: 200)
Image("imageName").resizeble().frame(witdh: 200, height: 200)
var body: some View {
Image("turtlerock")
.resizable()
.frame(width: 200, height: 200)
.clipShape(Circle())
.overlay{
Circle().stroke(.white, lineWidth: 4)
}
.shadow(radius: 7)
}
(간단요약) step1 ~step5 MapKit 사용해서 map render 해보기
Frameworks 사용해보기
import MapKit
map 정보를 받아올 수 있는 state 변수 만들어주기
body에서 Map함수를 불러와서 보여준다.
import MapKit
struct MapView: View {
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868),
span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
)
var body: some View {
Map(coordinateRegion: $region)
}
}
```
@State
: state property
$(달러)
표시를 해줘야 한다.(간단요약) step1 ~step10 뷰 위에 여러 뷰 올리기
view 위에 view를 올릴 때 height만 적으면 width는 알아서 계산해서 만들어 준다.
MapView().frame(height: 300)
offset
-> relative position
: 오프셋이란, 기준이 되는 주소에 더해지는 값을 의미
.offset(x: 100, y: 100)
Position
-> absolute position
: View의 available한 space를 모두 사용
position(x: 100, y: 100)
ignoresSafeAreaEdges
: safe area 를 무시할 edges 를 지정한다.
.ignoresSafeArea(edges: .top)
top에 있던 safe area가 없어진다. (우).ignoresSafeArea(edges: .bottom)
bottom 있던 safe area가 없어진다. (좌).ignoresSafeArea(edges: .all)
bottom 있던 safe area가 없어진다. (우)