옵저버블 객체
Coddy Swift 여정의 SwiftUI 입문 섹션에 포함된 레슨. 50개 중 40번째.
여러 뷰가 공유하거나 자체 로직을 가진 데이터는 클래스에 넣습니다. 이 클래스는 ObservableObject를 준수하며, 화면에 표시되는 각 속성에는 @Published가 표시됩니다:
class Cart: ObservableObject {
@Published var count = 0
func add() {
count += 1
}
}객체를 생성하는 뷰는 @StateObject를 사용하여 객체를 저장합니다. SwiftUI는 뷰가 화면에 표시되는 동안 해당 객체 하나를 계속 유지하고, 게시된 속성이 변경될 때마다 뷰를 다시 그립니다:
struct ContentView: View {
@StateObject private var cart = Cart()
var body: some View {
VStack {
Text("Items: \(cart.count)")
Button("Add to cart") {
cart.add()
}
}
}
}부모 뷰로부터 기존 객체를 받는 자식 뷰는 대신 @ObservedObject로 표시합니다. 자식 뷰는 객체를 관찰하지만 소유하지는 않습니다.
챌린지
중급Scoreboard 클래스가 화면에 연결되어 있지 않습니다. ObservableObject로 만들고 @Published points를 사용하며, @StateObject를 사용해 ContentView에 저장하고, 버튼이 scoreboard.score()를 호출하도록 만드세요. 한 번 탭한 후 텍스트는 Points: 10으로 표시되어야 합니다.
직접 해보기
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
SwiftUI 입문의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드