ํ๋กํผํฐ ๋ํผ @Environment @Environment๋ SwiftUI์์ ์ฌ์ฉ๋๋ ํ๋กํผํฐ ๋ํผ(wrapper)๋ก, SwiftUI ๋ทฐ์ ์ปจํ
์คํธ(Context)์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. @Environment๋ฅผ ์ฌ์ฉํ๋ฉด ๋ทฐ์์ ์์คํ
์ ์ค์ ์ด๋ ์ํ์ ๊ฐ์ ์ปจํ
์คํธ์ ๋ํ ์ ๋ณด์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ทฐ๊ฐ ๋คํฌ ๋ชจ๋์์ ์คํ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ํด๋น์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ํ ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ง๊ฒ ํ
์คํธ๋ฅผ ํ์ํ๊ฑฐ๋, ์์คํ
์ ์ก์ธ์ค ๊ถํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฑ์ ์์
๋ ๊ฐ๋ฅํฉ๋๋ค. @Environment๋ ์ผ๋ฐ์ ์ผ๋ก @State, @Binding, @ObservedObject ๋ฐ @EnvironmentObject์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ค์ ๋ชจ๋..
๐ Apple
Property Wrapper ๋? Swift์์ property wrapper๋ ์์ฑ์ ๊ฐ์ธ๊ณ ์ถ๊ฐ ๋์์ ์ ๊ณตํ๋ ๋ํผ(wrapper) ํ์
์
๋๋ค. Property Wrapper์ ์ฅ์ Property Wrapper๋ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ , ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ด๋ฉฐ, ์์ฑํด์ผ ํ๋ ์ฝ๋ ์์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. Swift์ ์ด๋ฏธ ์กด์ฌํ๋ Property Wrapper 1. @IBOutlet - Interface Builder์ ์์ธ๋ ์ ๋ํ๋ด๋ฉฐ, ํด๋น ์ธํฐํ์ด์ค ์์์ ์ฐ๊ฒฐ๋ ์์ฑ์ ์ ์ธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. 2. @Published - SwiftUI์ ObservableObject ์์ฑ์ ๋ํ๋ด๋ฉฐ, ํด๋น ์์ฑ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง๋ค observer์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆฌ๋๋ก ํฉ๋๋ค. 3. @Environ..
ViewBuilder๋? ํด๋ก์ ์์ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ปค์คํด ๋งค๊ฐ๋ณ์ ์์ฑ์
๋๋ค. ViewBuilder๋ ์์ ๋ทฐ๋ฅผ ์์ฑํ๋ ํด๋ก์ ๋งค๊ฐ๋ณ์์ ๋ํ ๋งค๊ฐ๋ณ์ ์์ฑ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ทฐ ๋น๋๋ฅผ ์ฌ์ฉํด์ ํด๋น ํด๋ก์ ๊ฐ ์ฌ๋ฌ ์์ ๋ทฐ๋ฅผ ์ ๊ณตํ ์ ์๋๋กํฉ๋๋ค. ์ฆ, SwiftUI์์๋ ViewBuilder๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ก์ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ๋ทฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ๋
์ ํ์ฅํ์ฌ, ์ฌ์ฉ์๋ ์์ ๋ง์ ๋งค๊ฐ๋ณ์ ์์ฑ์ ๋ง๋ค์ด ํด๋ก์ ์์ ๋ทฐ๋ฅผ ์์ฑํ๋๋ก ์ง์ ํ ์ ์์ต๋๋ค. ์ด ๋งค๊ฐ๋ณ์ ์์ฑ์ ์ฌ์ฉํ๋ฉด, ๋ทฐ๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋
์ฑ ๋๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ฌ์ฌ์ฉ์ฑ๋ ๋์์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ง์ ๋งค๊ฐ๋ณ์ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ทฐ์ ์์, ํ
๋๋ฆฌ ์คํ์ผ, ๋ฐฐ์น ๋ฐฉ์ ๋ฑ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ..
Button { } label: { Text("Next") .frame(width: 200.0, height: 100.0) .foregroundColor(.blue) .font(.system(size: 14, weight: .bold)) .overlay( RoundedRectangle(cornerRadius: 20) .stroke(.black, lineWidth: 5) ) } .background(.pink) .cornerRadius(20) //์์ cornerRadius๊ฐ๊ณผ ์ผ์น์ํค๊ธฐ ์์ง ๋ฒํผ ํด๋ฆญ์ ๋ถ์์ฐ์ค๋ฝ๋ค!?
NavigationView์์ iPad sidebar ์จ๊ธฐ๋ ๋ฐฉ๋ฒ .navigationViewStyle(StackNavigationViewStyle())
๋ค๋น๊ฒ์ด์
๋ฐ ์ค๋ณต๋์ด ๊ณ์ ์์ผ๋ NavigationView๋ ๋ฉ์ธ ๋ทฐ์๋ง ์ค์ ํ๊ณ NavigationLink๋ก ์ฐ๊ฒฐ๋๋ ํ์๋ทฐ์๋ NavigationView{}๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
1. ๋ด๋น๊ฒ์ด์
ํ์ดํ์ด ์ค์ฒฉ๋๋ ๋ฌธ์ >> ๊ฐ์ฅ ์ฒ์ ๋ทฐ์๋ง NavigationView๋ฅผ ๋ฃ์ด์ค๋ค. ๊ทธ ๋ค์์ ์์ด๋ ๋ทฐ์๋ ๋ฃ์ด์ฃผ์ง ์์๋ ๋๋ค. 2.navigationBarTitleDisplayMode ๊ฐ ์ํ๋๋ฐ๋ก ์๋ํ์ง ์๋ ๋ฌธ์ >> Link๋ก ์ฐ๊ฒฐ๋ ์ด์ ๋ทฐ์(ํด๋น ๋ทฐ๋ฅผ ํธ์ถํ๋ ๋ทฐ์) navigationBarTitleDisplayMode(.large) ํด์ฃผ์๋ค.
1. ๋ทฐ ์ ์ฒด ๋ฐฐ๊ฒฝ ์ ๋ฐ๊พธ๊ธฐ (๋
ธ์น ํฌํจ) ZStack { Color.green.edgesIgnoringSafeArea(.all) } ZStack ์์ Color.green.edgesIgnoringSafeArea(.all) ๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค. >> NavigationView๋ฅผ ์ฌ์ฉํ ๋ ์๋ ์ฝ๋์ฒ๋ผ NavigationView ์์ ZStack์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. struct HomeView: View { var body: some View { NavigationView { ZStack { Color.red.edgesIgnoringSafeArea(.all) } } } } 2. ์ปจํธ๋กค ์์ ๋ฐฐ๊ฒฝ ์ ๋ฐ๊พธ๊ธฐ .background(.yellow) ์ํ๋ ์์ {ํ
์คํธ, ๋ฒํผ, ๋ทฐ ๋ฑ } ๋ค์ .backgro..