SwiftUI 100 레시피/Data Flow
-
SwiftUI Data Flow - @AppStorage 사용하기SwiftUI 100 레시피/Data Flow 2022. 6. 22. 12:29
@AppStroage를 사용하기, 예를 들어 토글버튼으로 배경을 검정색으로 전환하고 앱을 종료해도 앱을 다시 켤경우 검정색으로 유지됨 import SwiftUI struct ContentView: View { @AppStorage("isOn") private var isOn: Bool = false var body: some View { VStack{ Toggle(isOn: $isOn, label: { Text("Dark Mode").foregroundColor(.white) }).fixedSize() }.frame(maxWidth: .infinity, maxHeight: .infinity) .background(isOn ? Color.black: Color.orange) } } struct Conten..
-
SwiftUI Data Flow - 이미지 다운로드 및 디스플레이SwiftUI 100 레시피/Data Flow 2022. 6. 22. 11:58
1. ImageLoader.swift 화일 생성후 코드 작성 2. URLImage (SwiftUI) 화일 생성후 코드 작성 #1. ContentView import SwiftUI struct ContentView: View { let posters = ["https://imgnews.pstatic.net/image/277/2022/06/21/0005106603_001_20220621171601527.jpg?type=w647", "https://imgnews.pstatic.net/image/020/2022/06/22/0003435598_001_20220622093201084.jpg?type=w647", "https://imgnews.pstatic.net/image/008/2022/06/21/00047613..
-
SwiftUI Data Flow - onReceive modifier를 사용한 NotificationsSwiftUI 100 레시피/Data Flow 2022. 6. 21. 18:42
import SwiftUI extension Notification.Name{ static let taskAddedNotification = Notification.Name("TaskAddedNotification") } struct ContentView: View { @State private var newTask: String? var body: some View { VStack{ Button("Post Notification"){ NotificationCenter.default.post(name: Notification.Name.taskAddedNotification, object: "세차하기") } Text(newTask ?? "").onReceive(NotificationCenter.defaul..
-
SwiftUI Data Flow - onChange modifier를 사용한 state changesSwiftUI 100 레시피/Data Flow 2022. 6. 21. 18:25
import SwiftUI struct ContentView: View { @State private var isLightOn : Bool = false var body: some View { Toggle("Light", isOn: $isLightOn) .onChange(of: isLightOn, perform: {value in if value { print("Light On") } else { print("Light Off") } }) .fixedSize() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
-
SwiftUI Data Flow - optional bindings을 취급하는 방법SwiftUI 100 레시피/Data Flow 2022. 6. 21. 18:03
import SwiftUI struct ContentView: View { let name: String? = "홍길동" var body: some View { // 첫번째 방법, 권장하지 않음 Text(name!) //두번째 방법 Text(name ?? "") //세번째 방법 name.map{ Text($0) } //네번째 방법 if let name = name{ Text(name) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
-
SwiftUI Data Flow - @EnvironmentObject를 사용하여 Global state 적용하기SwiftUI 100 레시피/Data Flow 2022. 6. 21. 12:27
App화일에서 Counter클래스를 environmentObject 로 설정하고 ContentView에서 @EnvironmentObject 를 사용하여 각 뷰에서 클래스 함수를 사용할 수 있게 함 #1. ContentView import SwiftUI struct ContentView: View { @EnvironmentObject var counter: Counter var body: some View { VStack(spacing:10){ Text("\(counter.value)").font(.largeTitle) GreenCounterView() RedCounterView() } } } struct ContentView_Previews: PreviewProvider { static var previ..
-
SwiftUI Data Flow - @Binding을 사용하여 child뷰에서 parent뷰로 데이터 전송SwiftUI 100 레시피/Data Flow 2022. 6. 21. 11:49
AddItemView에서 바인딩으로 데이터를 ContentView로 전송하는 방법 #1. ContentView import SwiftUI struct ContentView: View { @State private var isPresented: Bool = false @State private var name: String = "" var body: some View { VStack(spacing: 10) { Text(name) .font(.largeTitle) Button("추가하기"){ name = "" isPresented = true } }.sheet(isPresented: $isPresented, content: { AddItemView(name: $name) }) } } struct Conten..