-
WWDC 2019에서 발표했던 Combine
최소버전이 ios 13 이기때문에 아직 바로 사용할 순 없지만, 무엇인지 알아보자.
Combine이란?
https://developer.apple.com/documentation/combine
Combine은 비동기적인 이벤트 event-processing연산자를 조합함으로써 사용자 정의할 수 있는 프레임워크이다.
시간에 따라 값을 처리하기 위한 선언적(declarative) API이다.
발생한 이벤트를 어떻게 가공하고, 소비할지에 초점을 맞춘다.
- Publisher프로토콜은 시간이 지남에 따라 값의 시퀀스를 제공 할 수있는 유형을 선언합니다. Publishers 업스트림 게시자로부터 받은 값에 대해 조치를 취하고 이를 다시 게시하는 연산자(operattors) 가 있습니다.
- Subscriber에서 요소를 수신할 때 요소에 대해 작동합니다. 게시자는 구독자가 명시적으로 요청한 경우에만 값을 내보냅니다. 이렇게 하면 subscriber code가 연결된 게시자로부터 이벤트를 받는 속도를 제어할 수 있습니다.
-> Publisher 프로토콜과 Subscriber 프로토콜로 값을 방출하고, 전달받는셈...!
Receiving and Handling Events with Combine
let pub = NotificationCenter.default .publisher(for: NSControl.textDidChangeNotification, object: filterField) let sub = NotificationCenter.default .publisher(for: NSControl.textDidChangeNotification, object: filterField) .sink(receiveCompletion: { print ($0) }, receiveValue: { print ($0) }) let sub = NotificationCenter.default .publisher(for: NSControl.textDidChangeNotification, object: filterField) .map( { ($0.object as! NSTextField).stringValue } ) .sink(receiveCompletion: { print ($0) }, receiveValue: { print ($0) }) let sub = NotificationCenter.default .publisher(for: NSControl.textDidChangeNotification, object: filterField) .map( { ($0.object as! NSTextField).stringValue } ) .filter( { $0.unicodeScalars.allSatisfy({CharacterSet.alphanumerics.contains($0)}) } ) .debounce(for: .milliseconds(500), scheduler: RunLoop.main) .receive(on: RunLoop.main) .assign(to:\MyViewModel.filterString, on: myViewModel) // cancel sub?.cancel()
RxSwift 와의 비교
Combine은 Rxswift를 built in framework로 만들어줬다는 평(?)을 받는데 아래 비교 자료를 통해 알아보자.
Combine은 애플에서 만든 built in framework이다.
위의 표를 보며 SwiftUI와의 연동이 좋다는것을 알 수 있다.
Combine의 성능
https://medium.com/flawless-app-stories/will-combine-kill-rxswift-64780a150d89
combine의 성능이 좋다는것을 알 수 있는 article
728x90'Swift' 카테고리의 다른 글
dynamicMemberLookup (+ KeyPath) (0) 2021.09.23 ios 웹뷰와 통신 (Native <-> JavaScript 통신) (0) 2021.07.21 Swift Swizzling (0) 2021.07.16 Swift Async / Await (0) 2021.07.09 Swift Thread 처리에 대해 (Operation Queue vs Dispatch Queue) (0) 2021.07.07