What is Combine
The Combine framework provides a declarative Swift API for processing values over time. These values can represent many kinds of asynchronous events. Combine declares publishers to expose values that can change over time, and subscribers to receive those values from the publishers.
Combine framework ก็เป็น declarative API สำหรับการประมวลผลค่าตลอดเวลา หรือที่เราเรียกกันว่า Reactive Programming ให้ถึงนึกเราต้องการค่าๆนึงที่มันเป็นตลอดเวลา แล้วเราก็อยากได้ค่าเพื่อไปอัพเดใน UI เห็นภาพง่ายๆ ก็ Timer ที่นับเลขตลอดเวลา เราก็อยากได้ค่านั้นมาแสดงผล
โดย Combine มี core 3 concepts ดังนี้
Core Concepts
Publishers
Publishers เปรียบเสมือนผู้ที่คอยส่งค่าที่อัพเดทตลอดเวลา ถ้าเป็น Timer ก็จะคอยส่งค่าเวลาอันล่าสุดมาตลอดเวลา
Operators
ตัวดำเนินการ (Operators) เป็นเครื่องมือสำคัญที่ช่วยให้เราสามารถดำเนินการกับข้อมูลที่ได้รับจาก Publishers หรือผลลัพธ์ที่ได้จากการรวมหรือประมวลผลข้อมูลได้อย่างมีประสิทธิภาพ
Operators ที่ใช้ก็อย่างเช่น map
, flatMap
หรือ filter
Subscribers
Subscribers เป็น protocols ที่รับค่าจาก Publisher
Combine provides sink and assign subscribers as operators on the Publisher type:
sink(receiveCompletion:receiveValue:)
จะ return closures สำหรับรับค่า และ completionsassign(to:on:)
เมื่อ subscriber รับค่า output จะถูกเก็บในตัวแปรด้วย key-path
สามารถดูเรื่อง KeyPath
Overview
เรามาดูภาพใหญ่กันหน่อยว่า Combine มีอะไรบ้าง
- Publisher จำเป็นต้องมี Subscriber เพื่อใช้งาน ให้เชื่อมต่อ Subscriber กับ Publisher
- เมื่อเรียกใช้วิธี subscribe(_:), Subscriber จะถูกเชื่อมต่อกับ Publisher และวิธี receive ของ Subscriber จะถูกเรียกใช้
- เมื่อวิธี receive(subscription:) ของ Subscriber ถูกเรียกใช้งาน จะทำให้ Publisher เริ่มส่งค่าองค์ประกอบที่ถูกเผยแพร่ใหม่
- เมื่อ Publisher เสร็จสิ้นการทำงาน มันจะเรียกใช้ receive(completion:) ซึ่งสามารถสิ้นสุดการเผยแพร่ได้ด้วยข้อผิดพลาดหรือสถานะความสำเร็จ