assign은 KeyPath를 받아 해당 인스턴스의 값을 계속해서 업데이트 할 수 있는 메서드에요.
KeyPath는 간단히 말해서 어떤 인스턴스의 프로퍼티에 접근하기 위한 방법 중 하나로, KVO(Key Value Coding) 나 KVC(Key Value Observing) 같은 기능을 제공하지만, 프로퍼티의 이름 그 자체로 프로퍼티에 접근할 수 있어서 훨씬 안정적이고 변화에 대응하기 쉬워요.
추천 레퍼런스
assign은 sink 메서드처럼 Publisher로부터 발행된 값을 받아 핸들링 할 수 있습니다.
하지만 sink와는 다른 특징들이 몇 가지 있어요.
assign은 sink와 달리, 특정 객체의 프로퍼티에 값을 할당하는데에 목적이 있어요. 예를 들어, 뷰모델의 값을 뷰 속성에 별도의 클로저 없이 직접 연결해야 할 때 유용해요. 별도의 클로저가 없기 때문에 코드가 훨씬 간결해져요.
assign은 sink와 달리 unowned 참조를 사용하기 때문에 신중하게 생명주기를 컨트롤해야 해요.
assign은 sink와 달리 에러처리 없이 해당 객체의 프로퍼티에 직접 값을 할당해요. 따라서 Publisher의 Failure이 Never일 때만 사용할 수 있어요.
extension Publisher where Self.Failure == Never { // Failure == Never!
public func assign<Root>(to keyPath: ...) -> AnyCancellable
}