[swift] SwiftUI 뷰의 기억 제어
SwiftUI는 새로운 프레임워크로, 기억 속성을 사용하여 뷰를 업데이트할 수 있습니다.
때로는 뷰의 기억을 명시적으로 제어해야 할 필요가 있습니다. 이를 위해 SwiftUI에서는 @State
, @Binding
, @ObservedObject
, @EnvironmentObject
과 같은 속성 래퍼를 제공합니다.
@State
@State
속성 래퍼는 단일 뷰에 속하는 기억을 저장하는 데 사용됩니다. 예를 들어 토글 버튼의 상태를 유지하거나 입력 필드의 텍스트를 저장하는 데 사용됩니다.
struct ToggleView: View {
@State private var isToggled: Bool = false
var body: some View {
Toggle("Toggle", isOn: $isToggled)
}
}
@Binding
@Binding
속성 래퍼는 상위 뷰로부터 전달된 값을 수정할 때 사용됩니다. 예를 들어 상위 뷰에서 @State
로 선언된 값을 하위 뷰에서 사용하고 수정할 때에는 @Binding
을 사용합니다.
struct ParentView: View {
@State private var isToggled: Bool = false
var body: some View {
ChildView(isToggled: $isToggled)
}
}
struct ChildView: View {
@Binding var isToggled: Bool
var body: some View {
Toggle("Toggle", isOn: $isToggled)
}
}
@ObservedObject
@ObservedObject
속성 래퍼는 외부 객체의 변경을 관찰할 때 사용됩니다. 외부 객체가 업데이트될 때 뷰도 자동으로 업데이트됩니다.
class UserData: ObservableObject {
@Published var name: String = "John"
}
struct ContentView: View {
@ObservedObject var userData: UserData
var body: some View {
Text(userData.name)
}
}
@EnvironmentObject
@EnvironmentObject
속성 래퍼는 환경 객체를 사용할 때에 사용됩니다. 여러 뷰에서 공유되어야 하는 전역 객체를 사용할 때 유용합니다.
class UserSettings: ObservableObject {
@Published var themeColor: Color = .blue
}
struct ContentView: View {
@EnvironmentObject var userSettings: UserSettings
var body: some View {
Text("Theme color: \(userSettings.themeColor.description)")
}
}
SwiftUI에서는 위와 같은 속성 래퍼를 통해 뷰의 기억을 효과적으로 제어할 수 있어, 더욱 강력하고 유연한 앱을 구축할 수 있습니다.
참고: