๐ Onboarding ์ด๋ฒ MC3 ํ๋ก์ ํธ์์ ์จ๋ณด๋ฉํ๋ฉด ๊ตฌํ์ ๋งก์์ด์,์๋ ์ ์จ๋ณด๋ฉ์ ๊ตฌํํ ๋๋ ๊ทธ๋ฅ ๋๋๋๋ก ๋ง ๊ตฌํ์ ํด์ ์ ๋ฆฌ๊ฐ ์๋์์ง๋ง์ด๋ฒ์ ๋ค์ํ๋ ๊น์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค ํฉ๋๋ค. 1. ์ฌ์์ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ก์ปฌ ๋ฐ์ดํฐ ๋ณ์ + ์ต์ด ์คํ์ ์จ๋ณด๋ฉ ํ๋ฉด ๋์ฐ๊ฒ ํ๋ ์์ ์ฑ์ด ์ฌ์์ ์ฌ๋ถ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด์ , ๊ธฐ๊ธฐ์ ๋ก์ปฌ ๋ฐ์ดํฐ๋ก ์ ์ฅํฉ๋๋ค.@AppStorage๋ฅผ ์ด์ฉํฉ๋๋ค.์ต์ด ๊ตฌ๋์์๋ง ํด๋น ๋ฐ์ดํฐ ๊ฐ์ด true์ด๋ฏ๋ก ์จ๋ณด๋ฉํ๋ฉด์ด .fullScreen์ผ๋ก ๋์์ง๊ณ , ์ดํ์ false๋ก ๋ฐ๊ฟ์ฃผ๋ฉด์์ฌ์คํ์์๋ ๋จ์ง ์๊ฒ ํฉ๋๋ค.import SwiftUIstruct ContentView: View { // ์จ๋ณด๋ฉ ํ๋ฉด์ ์ฑ ์ต์ด ์คํ๋ ํ๋ฒ๋ง ๋์ฐ๋๋ก ํ๋ ๋ก์ปฌ ๋ณ์ @AppStorage("..

๐ WatchOS - SwiftUINavigationLink - PlainButtonStyle๋ก ๋ฒํผ์ ์๊ฐ์ ์์ ์ ์ฉ X PlainButtonStyle()๋ชจ๋ OS์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฒํผ ์คํ์ผ๋ก, ์ ํด ์ํ(IDLE)์์๋ ๋ฒํผ์ ์ฝํ ์ธ ์ ์ด๋ ํ ์์์ ์์๋ ์ ์ฉํ์ง ์์ WatchOS๋ฅผ ๊ฐ๋ฐํ๋์คVGrid์์ ForEach๋ฌธ์ผ๋ก ๋ฐ์ดํฐ๋ค์ List๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ,๊ฐ Cell๋ค์ NavigationLink๋ก ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์์ ์ ํ๋ค. ๋จผ์ CellView๋ฅผ ๊ทธ๋ฆฌ๋ ์์ ์ ๋จผ์ ํ๊ณ , ์ดํ NavigationLink๋ก DetailView๋ก ๋์ด๊ฐ๊ฒ ์์ ํ์๋ค.import SwiftUIstruct WatchMarkerListView: View { let tempData = [..

โ Custom Alert ํด์ปคํค์ ํ ๋,์ด๋ฐ ๋ทฐ๋ฅผ ๊ตฌํํด์ผํ์๋ค. ์ด๊ฒ์ ๊ธฐ์กด์ Alert๋ฅผ Customํ๋ฉด ๋์ค๋๊ฒ์ด๋ค. import SwiftUIstruct ContentView: View { @State private var isAlertPresented = false var body: some View { ZStack { VStack { Button("Show Custom Alert") { isAlertPresented.toggle() } .padding() ..

โ ๋ทฐ๋ฅผ ์ ํ์ํค๋ ์ ๋๋ฉ์ด์ ์ธ Flip ๊ธฐ๋ฅ 1. MainViewimport SwiftUIstruct ContentView: View { @State var isFlipped = false var body: some View { VStack(spacing: 0) { ZStack { if isFlipped { FrontView() } else { BackView() } } .scaleEffect(x: isFlipped ? -1 : 1) .f..

โ SwiftData Why is SwiftData ? - SwiftData๋ ์ ๋ง๋ค์ด์ก์๊น์ ? CoreData์ Realm์ ์ฅ์ ์ ํฉ์น๋ฏํ ๋๋ What is SwiftData ? ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ทธ ์์ฒด๋ ์๋๋ผ๋ ๊ฒ. ์ธ๋ถ ํ์ผ ํ์ ์์ด ์ ์ ์ผ๋ก ์ฝ๋์ ์ง์คํ๊ณ Swift์ ์๋ก์ด ๋งคํฌ๋ก ์์คํ ์ ์ฌ์ฉํ์ฌ ์ํ ํ API ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ตฌ์ฑ์์ @ . โ @Model ํด๋์ค๋ฅผ persistent ๋ชจ๋ธ์ด๋ผ๋ ํ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ . ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฐํฐ๊ฐ์ ์ญํ ์ ํ๊ฒ๋๊ณ , ๋ persistent ๋ชจ๋ธ์ด๋ผ๋ ํ์ ์ผ๋ก ์ฑํํ ์ด์ ์ด๊ฑด ์คํค๋ง์ผ ๋ผ๊ณ ์๋ ค์ฃผ๊ฒ ๋๋ค. PersistentModel : AnyObject, Obersvable,..

TextEditor์ Background Color๋ฅผ ์ ์ฉํ๋ ค๋ฉด .scrollContentBackground(.hidden)์ผ๋ก ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์ ์จ๊ธฐ๊ณ .background(.clear)๋ฅผ ์ ์ฉํ๋ฉด ๋๋ค. ์ด ์ํ์์, TextEditor(text: $memoContent) //.scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .cornerRadius(10) .lineSpacing(10) ์ฃผ์์ ์ง์์ฃผ๋ฉด, TextEditor(text: $memoContent) .scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .corne..

โ ๊ธฐ์กด์ ๋ฐฉ์ : NavigationView ๊ธฐ์กด์๋ NaivgationView์ NavigationLink๋ฅผ ํตํด ํ์ดํ๊ณผ ๋ทฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ์์ผ๋ก ์ฌ์ฉ์ด ๋๋ค. var body: some View{ NavigationView { NavigationLink { ๋ทฐ(color: .red, order: 1) } label: { Text("ํ์ดํ") } } } ๐ก Stack์ผ๋ก ๋ฐ๋๋ฉด์ NavigationView์ ์ด๋ค ๋จ์ ์ ๊ทน๋ณตํ๋์ง ? NavigationView์ ์ฃผ์ ๋จ์ ์ค ํ๋๋ SwiftUI์์ ๋งค์ฐ ๊ฐ๋จํ ์ฑ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ทฐ๊ฐ ๋ด๋น๊ฒ์ด์ ์คํ์ ์๋์ผ๋ก ํธ์๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ํ, NavigationView๋ฅผ ์ฌ์ฉํ ๋ ๋ด๋น๊ฒ์ด์ ๋ง๋์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ์..
โ Property Wrapper ํ๋กํผํฐ๋ฅผ ๊ฐ์ธ ํน๋ณํ ํ์ ์ผ๋ก ๋ง๋ค์ด์ค๋ค. ๊ฐ๋จํ ๋งํด๋ณด๋ฉด, ์ด๋ค ๋ก์ง๋ค์ ๋งค๋ฒ ๋์ผํ๊ฒ ์ง์ ํด์ฃผ์ง ์๊ณ Property Wrapper๋ก ๋ง๋ ํ์ ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์ ์ธํด ๋์ผ ๋ก์ง์ ์ํํ๋๋ก ํ๋ค. โ Property Wrapper๊ฐ ์๋ค๋ฉด ? struct House { private var width = 0 var size: Int { get { return width } set { width = pow(newValue, 20) } } } struct KoreaHouse { private var _appartment = House() private var _villa = House() var appartmentSize: Int { get { return _appar..