ObservedObject
- observable 객체를 구독하는 property wrapper
- observable 객체의 값이 변경되면 뷰에 업데이트 시켜주는 기능이다.
StateObject
- observable 객체를 인스턴스화하는 property wrapper
- observable 객체의 값이 변경되면 뷰에 업데이트 시켜주는 기능이다.
ObservedObject vs StateObject 차이점
- 상태 변경이 있을때 @ObservedObject는 뷰를 다시 생성해서 그리지만
- 상태 변경이 있을떄 @StateObject는 뷰를 다시 생성하지 않고 항상 동일한 뷰가 사용된다 (효율적이다)
- @ObservedObject는 뷰를 다시 그리기 때문에 기존 view 값이 모두 초기화되는 단점이 있다.
import SwiftUI
import CoreData
final class MyViewModel: ObservableObject {
@Published var isOn = false
func toggle() {
isOn.toggle()
}
}
struct MyView: View {
@StateObject var viewModel = MyViewModel()
var body: some View {
Button(viewModel.isOn ? "on" : "off") {
viewModel.toggle()
}
}
}
struct ContentView: View {
@State var isOn = false
var body: some View {
VStack {
Button(isOn ? "on" : "off") {
isOn.toggle()
}
Divider()
MyView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import SwiftUI
import CoreData
final class MyViewModel: ObservableObject {
@Published var isOn = false
func toggle() {
isOn.toggle()
}
}
struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
Button(viewModel.isOn ? "on" : "off") {
viewModel.toggle()
}
}
}
struct ContentView: View {
@State var isOn = false
var body: some View {
VStack {
Button(isOn ? "on" : "off") {
isOn.toggle()
}
Divider()
MyView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
'swiftUI' 카테고리의 다른 글
swiftUI - 소리 파일 사용하기 (0) | 2023.09.04 |
---|---|
swiftUI - blur 뒷 배경 불투명하게 만들기 (0) | 2023.09.04 |
swiftUI - layoutPriority (0) | 2023.09.01 |
swiftUI - Code Snippets (0) | 2023.09.01 |
swiftUI - @State, @Observable, @EnvironmentObject (0) | 2023.09.01 |