@State는 속성의 값의 변하면 UI를 업데이트 할 수 있도록 알려주는 역할을 한다.
@State는 Struct에서만 쓰인다.
Class 에서는 @ObservedObject
struct User {
var fristName = ""
var lastName = ""
}
struct ContentView: View {
@State private var user = User()
var body: some View {
VStack {
Text("당신의 이름은 \\(user.fristName)\\(user.lastName) 입니다")
.font(.title)
.fontWeight(.bold)
.padding(30)
List {
Section(header: Text("이름을 입력하세요").font(.headline)) {
TextField("성", text: $user.fristName)
TextField("이름", text: $user.lastName)
}
}
}
}
}
@State VS @ObservedObject
@State 는 특정 뷰에서만 사용하는 속성이다.
@ObservedObject는 여러 뷰에서 공유할 수 있는 경우 사용한다.
@Published 와 같이 사용해야한다.
class UserSettings: ObservableObject {
//@ObervedObjet를 사용하기위해 @Published를 할당
@Published var score = 0
}
struct ContentView: View {
//@state를 지우고 @ObervedObject로 바꿔줌
@ObservedObject var settings = UserSettings()
var body: some View {
VStack {
Text("나의 점수는 \\(settings.score)점 입니다.")
Button(action: {
self.settings.score += 1
}) {
Text("Increase Score")
}
}
}
}
가장 일반적인 방향 두가지
1.View to View Model
2.View Model to View
텍스트 필드에 이름을 입력하는 경우
텍스트 필드를 유저 뷰 모델의 속성에 바인딩한다.