💡 일반적으로 struct 내의 변수값 변경은 불가능하다.구조체 내의 변수값을 변경하는 방법, View가 표시되는 동안 값을 변경하는 방법은 뭐가 있을까?
💡 subview를 사용할 때, @State를 @Binding 유형의 subview에 전달할 수 있다. 이 방법으로 서브뷰에서 @State에 대한 변경사항이나 업데이트 관찰이 가능하다.
@State와 클래스를 함께 사용했을 때, 구조체와는 달리 데이터가 업데이트 되지 않는다. 클래스(참조 타입)에는 @StateObject 사용. @StateObject 는 ObservableObject를 준수하는 클래스 유지에 사용된다.
소량의 데이터 앱에 저장시 사용 앱 종료 후에도 데이터 유지됨 변수에 새 값을 할당하면 값 업데이트 됨현재 Bool, Int, Double, String, URL, Data 타입 저장 가능
iOS에서는 앱의 화면을 일반적으로 scene(씬, 장면)이라고 부름.@SceneStorage 프로퍼티 래퍼는 어떤 하나의 씬에 저장된 데이터를 그대로 유지함.
@EnvironmentObject를 이용하면 어디에서나 데이터에 액세스가 가능. ObservableObject를 environment에 저장해, 여러 화면에서 데이터 공유가 가능하다.
루트 뷰에 .environmentObject() 수정자를 사용해 ObservableObject 객체를 전달하면, 앱 내의 모든 계층에서 해당 데이터에 전역적으로 접근이 가능함.
View에서 일부 코드를 실행할 수 있게 해주는 view modifier, 앱에서 추가 작업 트리거하는 이벤트로 사용.필요시 UI 업데이트.속성 값의 변경 사항 관찰을 위해 사용하는 방법.메인 스레드에서 실행됨. 따라서 UI에 영향이 갈만한 긴 프로세스 실행(서버와의
관찰된(Observe) 객체의 게시자(Publisher)가 값을 변경할 때 코드를 실행하고 싶다면, onReceive를 사용.
onSubmit onSubmit 이벤트는 일반적으로 사용자가 키보드의 Enter키 누를 때 발생. 이벤트가 발생하면 일부 코드를 실행해 유효성 검사를 하거나, 결과로 탐색 가능.
@StateObject 데이터를 @ObservedObject를 사용해 자식 뷰와 공유한다. @ObservedObject없이 데이터의 스냅샷은 얻을 수 있지만, 데이터는 더 이상 업데이트되지는 않는다.
@StateObject는 ObservableObject를 준수하는 클래스를 유지함.SwiftUI를 사용하다 보면 뷰를 처음부터 다시 그려야 할 때가 있다. 이 말은 @StateObject를 사용하는 객체를 제외한 모든 객체가 재설정되는 것을 의미한다.