Menu
Coddy logo textTech

옵저버블 객체

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로 표시합니다. 자식 뷰는 객체를 관찰하지만 소유하지는 않습니다.

challenge icon

챌린지

중급

Scoreboard 클래스가 화면에 연결되어 있지 않습니다. ObservableObject로 만들고 @Published points를 사용하며, @StateObject를 사용해 ContentView에 저장하고, 버튼이 scoreboard.score()를 호출하도록 만드세요. 한 번 탭한 후 텍스트는 Points: 10으로 표시되어야 합니다.

직접 해보기

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

SwiftUI 입문의 모든 레슨

직접 연습해 보세요: Swift 플레이그라운드