[SwiftUI Tutorials] SwiftUI Essentials - Creating and Combining Views
Creating and Combining Views | Apple Developer Documentation
This tutorial guides you through building Landmarks — an app for discovering and sharing the places you love. You’ll start by building the view that shows a landmark’s details.
developer.apple.com





- SwiftUI ์ฑ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฑ์ ์ฑ ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง.
- ์ด ๊ตฌ์กฐ์ body ์์ฑ์ ํ๋ ์ด์์ Scene์ ๋ฐํํ๊ณ ํ์ํ ์ฝํ ์ธ ๋ฅผ ์ ๊ณต.
- @main ์์ฑ์ ์ฑ์ entry point๋ฅผ ์๋ณ.


- ๊ธฐ๋ณธ์ ์ผ๋ก SwiftUI view ํ์ผ์ ๋ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ธ
- ์ฒซ ๋ฒ์งธ ๊ตฌ์กฐ๋ View ํ๋กํ ์ฝ์ ์ค์ํ๊ณ ๋ทฐ์ ์ฝํ ์ธ ์ ๋ ์ด์์์ ์ค๋ช
- ๋ ๋ฒ์งธ ๊ตฌ์กฐ๋ ํด๋น ๋ณด๊ธฐ์ ๋ํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ์ธ
๋ณด๋ฉด ํํ ๋ฆฌ์ผ ๊ณต์ ๋ฌธ์๋ ๋ด ์ฝ๋๋ ๋ค๋ฅธ ๊ฑธ ๋ณผ ์ ์๋๋ฐ, ์ด๊ฑด xcode๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด์ ๊ธฐ๋ณธ ์ฝ๋๊ฐ ์์ด์ฝ์ด ์ถ๊ฐ๋ ui๋ก ๋ฐ๋๋ฏ ํ๋ค.
๋ฑํ ํด๋๊ตฌ์กฐ์์ ์ด๋ฏธ์ง ํ์ผ์ด ์์ด์ ์์ํ์๋๋ฐ, ๋ ๋ ํ ์ฐ๋ฆฌํ ํ ํฌ ๋๋ฃ ๋ฃจ๋น ์ด SF Symbols์ ์กด์ฌ๋ฅผ ์๋ ค์คฌ๋ค!
Image(systemName: "์์ด์ฝ ์ด๋ฆ") ์ด๋ ๊ฒ ํ๋ฉด ๋ก์ปฌ์์ ๋ฐ๋ก ์ด๋ฏธ์ง ํ์ผ์ด ์์ด๋ ์ด๋ฏธ์ง ์ฝ์ ์ด ๊ฐ๋ฅํ๋ค.
SwiftUI๊ฐ ์ ๋ง ๊ฐํธํ๊ณ ์ข์๊ฒ, ๋ค์ .์ ๋ถ์ฌ์ ํ์ฅ์์ฒ๋ผ ์ฌ๋ฌ ๋์์ธ ์์๋ ์์ฑ๊ฐ์ ๋ฐ๋ก๋ฐ๋ก ์ฝ๋ฉํ ์ ์๋ค๋ ์ .
์์๋ง ์ต์ผ๋ฉด UI ์ ๋ง ๋นจ๋ฆฌ ๊ทธ๋ฆด ์ ์์ ๋ฏ! ์์ง์ ์ธ์ธ๊ฒ ๋ง๋ค.



- ์ฝ๋ ๋ณ๊ฒฝ ํน์ ์ธ์คํํฐ๋ฅผ ์ฌ์ฉํ์ฌ text view ์์ 
- Landmarks ์ฑ์ ๋น๋ํ ๋ source editor, ์บ๋ฒ์ค, ์ธ์คํํฐ์ ๊ฐ์ ํธ์ง๊ธฐ ์กฐํฉ์ ์ฌ์ฉ
- ์ฌ์ฉํ๋ ๋๊ตฌ์ ๊ด๊ณ์์ด ์ฝ๋๋ ์ ๋ฐ์ดํธ๋ ์ํ๋ก ์ ์ง๋๋ค.
1) ์ธ์คํํฐ



- SwiftUI ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๋ ค๋ฉด modifers ๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถ.
- modifers๋ ๋ทฐ๋ฅผ ๋ํํ์ฌ ํ์ ๋๋ ๊ธฐํ ์์ฑ์ ๋ณ๊ฒฝ.
- ๊ฐ modifer๋ ์๋ก์ด view๋ฅผ ๋ฐํํ๋ฏ๋ก ์ฌ๋ฌ modifers๋ฅผ ์ฌ์ฌ์ฒ๋ผ ์ฎ์ด์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ 

Stack์ ์ด์ฉํ์ฌ ์ฌ๋ฌ๊ฐ์ง view(UI์์ ์ธ๋ฏ) ๊ฒฐํฉ


HStack์ด ๊ฐ๋ก๋ก, VStack์ด ์ธ๋ก


์ฝ๋์ ๋ฐ๋ก ๋๊ณ ์ฌ ์ ์์






//
//  SwiftUIView.swift
//  Landmarks
//
//  Created by ๊นํ์ on 2023/03/26.
//
import SwiftUI
struct CircleImage: View {
    var body: some View {
        Image("turtlerock")
            .clipShape(Circle())
            .overlay {
               Circle().stroke(.white, lineWidth: 4)
            }
            .shadow(radius: 7)
    }
}
struct CircleImage_Previews: PreviewProvider {
    static var previews: some View {
        CircleImage()
    }
}



- @State ํน์ฑ์ ์ฌ์ฉํ์ฌ ๋ ์ด์์ ๋ณด๊ธฐ์์ ์์ ํ ์ ์๋ ์ฑ์ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ขฐํ ์ ์๋ ์์ค๋ฅผ ์ค์ 
- SwiftUI๋ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ฐ์ ๋ฐ๋ผ ๋ทฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํจ



//
//  ContentView.swift
//  Landmarks
//
//  Created by ๊นํ์ on 2023/03/26.
//
import SwiftUI
struct ContentView: View {
    var body: some View {
        VStack {
            MapView()
                .ignoresSafeArea(edges: .top)
                .frame(height: 300)
            CircleImage()
                .offset(y: -130)
                .padding(.bottom, -130)
            
            VStack(alignment: .leading) {
                Text("Turtle Rock")
                    .font(.title)
                    .foregroundColor(.black)
                HStack {
                    Text("Joshua Tree National Park")
                        .font(.subheadline)
                    Spacer()
                    Text("California")
                        .font(.subheadline)
                }
                .font(.subheadline)
                .foregroundColor(.secondary)
                
                Divider()
                
                Text("About Turtle Rock")
                   .font(.title2)
                Text("Descriptive text goes here.")
            }
            .padding()
            Spacer()
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}