소피it블로그

[Combine] Published 정리 본문

개발_iOS/iOS 기타

[Combine] Published 정리

sophie_l 2022. 8. 12. 20:06

https://developer.apple.com/documentation/combine/published

 

Apple Developer Documentation

 

developer.apple.com

attribute로 마킹된 프라퍼티를 발행하는 타입

 

1. 선언

@propertyWrapper struct Published<Value>

2. 개요

 

@Published attribute를 가진 프라퍼티를 발행하면 이 타입의 퍼블리셔가 생성된다. 이 퍼블리셔는 다음과 같이 $ 연산자를 통해 접근할 수 있다.

class Weather {
    @Published var temperature: Double
    init(temperature: Double) {
        self.temperature = temperature
    }
}

let weather = Weather(temperature: 20)
cancellable = weather.$temperature
    .sink() {
        print ("Temperature now: \($0)")
}
weather.temperature = 25

// Prints:
// Temperature now: 20.0
// Temperature now: 25.0

프라퍼티가 변경되면 프라퍼티의 willSet 구문 안에 퍼블리싱이 진행되는데, 이는 해당 프라퍼티에 세팅되기 전에 구독자들이 새 값을 받는다는 것을 의미한다. 위의 예시에서 sink가 클로저를 두 번째로 실행할 때 25라는 매개변수 값을 받는다. 그러나 클로저가 weather.temperature를 평가했다면 20이 리턴될 것이다.

 

*주의할 점

 

@Published 어트리뷰트는 클래스에서 제한적으로 사용된다. 클래스 타입이 아닌 구조체 등에서는 사용하지 말고 클래스의 프라퍼티에만 사용하라.