lazy

@State

@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)
                }
            }
        }
    }
}

@ObservedObject

@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")
            }
        }
    }
}

Binding

가장 일반적인 방향 두가지

1.View to View Model

2.View Model to View

View to View Model

텍스트 필드에 이름을 입력하는 경우

텍스트 필드를 유저 뷰 모델의 속성에 바인딩한다.