![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9q0Ot%2FbtsH0ze8IL5%2FFfsJjnOWad9ra9NkrpWp30%2Fimg.png)
โ 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() ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGJUTM%2FbtsHZ8oXRwe%2Fs1oil8fK7yA5syJbOMhvL1%2Fimg.gif)
โ ๋ทฐ๋ฅผ ์ ํ์ํค๋ ์ ๋๋ฉ์ด์ ์ธ 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..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpie0D%2FbtsGRALTF5t%2FcDETIFywtznN7R6CXS3IA0%2Fimg.png)
โ SwiftData Why is SwiftData ? - SwiftData๋ ์ ๋ง๋ค์ด์ก์๊น์ ? CoreData์ Realm์ ์ฅ์ ์ ํฉ์น๋ฏํ ๋๋ What is SwiftData ? ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ทธ ์์ฒด๋ ์๋๋ผ๋ ๊ฒ. ์ธ๋ถ ํ์ผ ํ์ ์์ด ์ ์ ์ผ๋ก ์ฝ๋์ ์ง์คํ๊ณ Swift์ ์๋ก์ด ๋งคํฌ๋ก ์์คํ ์ ์ฌ์ฉํ์ฌ ์ํ ํ API ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ตฌ์ฑ์์ @ . โ @Model ํด๋์ค๋ฅผ persistent ๋ชจ๋ธ์ด๋ผ๋ ํ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ . ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฐํฐ๊ฐ์ ์ญํ ์ ํ๊ฒ๋๊ณ , ๋ persistent ๋ชจ๋ธ์ด๋ผ๋ ํ์ ์ผ๋ก ์ฑํํ ์ด์ ์ด๊ฑด ์คํค๋ง์ผ ๋ผ๊ณ ์๋ ค์ฃผ๊ฒ ๋๋ค. PersistentModel : AnyObject, Obersvable,..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw0JO0%2FbtsGOtT75y0%2FV6H7AgFuwhLPsf2HTHkEf0%2Fimg.png)
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..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAsNyw%2FbtsGnHFl7JC%2FWefUPLKqNIsFCnHFfdg9r0%2Fimg.gif)
โ ๊ธฐ์กด์ ๋ฐฉ์ : 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..
โ Property Wrapper ์์ฑ(Property)์ ์ถ๊ฐ์ ์ธ ํ๋์ด๋ ๊ณ์ฐ์ ๋ง๋ถ์ฌ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ตฌ์กฐ์ด๋ค. ํ๋กํผํฐ ๋ํผ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๋ก์ง์ด๋ ๊ณ์ฐ์ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ํจ๋ค. โ PreView ( ์์ฝ ) @State : ๋ทฐ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ๋ก์ปฌ ์ํ๊ฐ ์ ์ฅ @Binding : ๋ถ๋ชจ ๋ทฐ๋ก๋ถํฐ ๋ฐ์ ๊ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง @ObservedObject : ์ธ๋ถ ํด๋์ค์ ์ํ๋ฅผ ์ถ์ ํ๊ณ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ค. @EnvironmentObject : ์ฑ ์ ์ฒด์์ ๊ณต์ ๋๋ ์ํ ๊ฐ์ฒด ์ฌ์ฉ @Published : ObservableObject์ ์์ฑ์ ์ ๋ฐ์ดํธํ ๋ View๋ฅผ ์๋ ๋ฆฌํ๋ ์ @AppStorage : UserDefaults์ ๊ฐ์ ์ ์ฅํ๊ณ ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA2bUK%2FbtsC6qm4nE5%2Fmhn3hu3HDLJggDWEKeeY80%2Fimg.png)
๐ @State @Binding Property Wrapper์ ๋ํด์ State โ PropertyWrapper ? ๋ณํ๊ฐ ์๊ธฐ๋ฉด ํด๋น ๋ณ์์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์๋ก ์ธ ์ ์์์ ์๋ฏธํ๋ค. SwiftUI์์๋ property wrapper๋ฅผ ์ฌ์ฉํด์ ๋ณ์์ ๋ณํ์ ํด๋น ์์ ์ ์๋ํ ํ ์ ์๋ค. SwiftUI๋ state๋ก ์ ์ธ๋ ํ๋กํผํฐ๋ค์ ์ ์ฅ์๋ฅผ ๊ด๋ฆฌํ๋ค. StateValue ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ทฐ๋ ํด๋น value์ appearance๋ฅผ ๋ฌดํจํํ๊ณ ๋ค์ ๊ฐ์ ๊ณ์ฐํ๋ค. State ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด View๋ ์๋ก ๋๋๋ง์ ํ์ฌ ํญ์ ์ต์ ๊ฐ์ ๊ฐ์ง๋ค. State ์ธ์คํด์ค๋ ๊ทธ ์์ฒด๋ก ๊ฐ์ด ์๋, ๊ฐ์ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ๋งํ๋ค. ํ์ฌ ๋ทฐ UI์ ํน์ ์ํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ง๋ค์ด์ง๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณดํต Priv..