struct ContentView: View{
@State private var mainText:String = ""
@State private var showDetails:Bool = false
var body: some View{
VStack{
Button(action:{
selft.showDetails.toggle()
}){
Text("Button")
}
if self.showDetails{
Text(self.mainText)
.onAppear(){
self.mainText = "test"
}
.onDisappear(){
self.mainText = "Swfit UI"
}
}
}
}
}
Annotation을 활용하여 Wrapping 되어있는 값을 사용하는 개념
@State
@Binding
@ObservedObject
@EnvironmentObject
ObservableObject 프로토콜을 상속받아서 사용
복잡한 구조의 데이터
여러 View에서 공통으로 사용되는 데이터에 적합
선언한 View마다 각각의 Object를 할당하여 각 View마다 값이 있음.
Published Annotation을 통해 값이 변동되었을 때 바로 View에게 즉각적으로 알려준다.
@Published로 인해 count가 변할 때 Numbers의 @ObservedObject countRepo가 즉각 반응한다.
만약 @Published가 없다면?
Property Observer로 값이 변경된 직후인 didSet, 변경되기 직전인 willSet이 존재한다.
이러한 Observer를 통해 변화를 감지하고 특정 조건에 objectWillChange.send()로 @ObservedObject에 변화 값을 전달한다.