รวม Swift

Mar 24 2023
PUBLISHERS & SUBSCRIBERS ในบทความนี้ เราจะพิจารณาพื้นฐานขององค์ประกอบหลักสองส่วน PUBLISHER & SUBSCRIBER ของเฟรมเวิร์กการรวม Apple เปิดตัวเฟรมเวิร์กระบบในตัวที่เรียกว่า Combine ในปี 2019

สำนักพิมพ์และสมาชิก

ในบทความนี้ เราจะพิจารณาพื้นฐานของสององค์ประกอบหลัก PUBLISHER & SUBSCRIBER ของ Combine Framework Apple เปิดตัวเฟรมเวิร์กระบบในตัวที่เรียกว่า Combine ในปี 2019 เฟรมเวิร์กจัดเตรียม API ที่เปิดเผยเพื่อประมวลผลข้อมูลเมื่อเวลาผ่านไป

สำนักพิมพ์

Publisher เป็นประเภทที่ยืนยันกับ Protocol Publisher สามารถส่งเหตุการณ์ไปยังสมาชิกหนึ่งรายขึ้นไป

Publisher Protocol เป็นแบบทั่วไปในสองประเภท

  1. เอาท์พุต → เป็นประเภทของค่าเอาท์พุตที่เผยแพร่โดยผู้จัดพิมพ์
  2. ความล้มเหลว → เป็นประเภทของข้อผิดพลาดที่เกิดขึ้นเมื่อผู้เผยแพร่ล้มเหลวในการปล่อยค่า
  1. ค่าเอาต์พุต/วินาที
  2. เสร็จสิ้น

ผู้เผยแพร่โฆษณาจะปล่อยเหตุการณ์เฉพาะเมื่อมีการสมัครรับข้อมูลเท่านั้น

ฟังก์ชั่นหลักอย่างหนึ่งของ Publisher คือ รับ ซึ่งรับพารามิเตอร์อินพุตจากผู้สมัครสมาชิกเพื่อให้ตรงกับเอาต์พุตของผู้เผยแพร่

สมาชิก

ผู้สมัครสมาชิกกำหนดประเภทของอินพุตที่ควรได้รับจากผู้จัดพิมพ์

Subscriber Protocol เป็นแบบทั่วไปในสองประเภท

  1. อินพุต → เป็นประเภทของค่าอินพุตที่สมาชิกสามารถจัดการได้
  2. ความล้มเหลว → เป็นประเภทของข้อผิดพลาดที่สมาชิกสามารถจัดการได้เมื่อได้รับความล้มเหลวจากผู้จัดพิมพ์

ทำงานร่วมกับ Publisher และ Subscriber

การสร้างสำนักพิมพ์

สามารถสร้าง Publisher ได้โดยใช้ประเภทใดก็ได้ที่มีให้โดยการรวมเฟรมเวิร์กเช่น Just, Future, PassthroughSubject, CurrentValueSubject เป็นต้น

การสร้างสมาชิก

สามารถสร้างสมาชิกได้โดยใช้ประเภท inbuilt เช่น

  1. จม
  2. กำหนด

Sink เป็นวิธีที่ง่ายที่สุดในการเชื่อมโยงผู้สมัครสมาชิกกับผู้จัดพิมพ์

Sink ให้การปิดสองแบบ หนึ่งเพื่อยอมรับและจัดการค่าจากผู้จัดพิมพ์ และอีกอันคือจัดการการทำให้เสร็จสมบูรณ์

กำหนด(ให้กับ: )

กำหนดให้กับจะรับค่าจากผู้จัดพิมพ์และกำหนดให้กับวัตถุที่กำหนด

ตัวอย่าง: การสาธิตการทำงานของผู้จัดพิมพ์และสมาชิก

ลำดับ

Sequence Publisher จะแสดงลำดับของค่า จากนั้นจึงเรียกใช้การทำให้เสร็จสมบูรณ์ในตอนท้าย

เอาท์พุต:

ในตัวอย่างที่กำหนด เราจะเห็นว่าผู้เผยแพร่แสดงค่าทั้งหมดตามลำดับก่อนแล้วเรียกบล็อกการทำให้เสร็จสมบูรณ์

แค่

Just Publisher จะส่งผลงานไปยังสมาชิกแต่ละคนทันทีและเสร็จสิ้น

Just Publisher ไม่สามารถล้มเหลวได้ด้วยข้อผิดพลาด

เอาท์พุต:

ดังที่กล่าวไว้ เพียงแค่เสร็จสิ้นการเสร็จสิ้นทันทีหลังจากส่งค่าปัจจุบัน

อนาคต

ผู้เผยแพร่ในอนาคตจะปล่อยค่าหรือความล้มเหลวของการดำเนินการแบบอะซิงโครนัสและเสร็จสิ้น อนาคตทำสิ่งนี้ด้วยความช่วยเหลือของการปิดที่เรียกว่าสัญญา สัญญาจะใช้พารามิเตอร์ผลลัพธ์หนึ่งตัวซึ่งอาจเป็นค่าหรือความล้มเหลวก็ได้ อนาคตจะเสร็จสิ้นทันทีหลังจากได้รับมูลค่าหรือความล้มเหลวในสัญญา

ในตัวอย่างข้างต้น เราจะเห็นว่า Future กำลังเรียกใช้การปิดสัญญาซึ่งใช้มูลค่า

เอาท์พุต:

ที่นี่ “เริ่มทำงาน” จะถูกพิมพ์ก่อน เนื่องจากผู้สมัครสมาชิกสมัครรับข้อมูลจากผู้เผยแพร่ก่อน ซึ่งจะเริ่มทำงานแบบอะซิงโครนัส จากนั้นจะพิมพ์ "End" เนื่องจากการดำเนินการ async กำลังดำเนินการอยู่ และสุดท้ายจะพิมพ์ค่าที่ได้รับและเสร็จสิ้นการรับ

PassthroughSubject

PassthroughSubject จะแสดงค่าหลายค่าและไม่มีค่าเริ่มต้นใดๆ ในการแนบผู้สมัครสมาชิกสามารถรับค่าจาก เมธอด send (: )

ในตัวอย่างข้างต้น เราจะเห็นว่า PassthroughSubject ไม่มีค่าเริ่มต้นใดๆ ในการส่งค่าไปยังผู้จัดพิมพ์โดยใช้ เมธอด send (: ) ผลลัพธ์ในการส่งค่าในการเรียกกลับค่ารับของผู้ใช้บริการ

เอาท์พุต:

CurrentValueเรื่อง

CurrentValueSubject จะแสดงค่าปัจจุบันและควรเริ่มต้นด้วยค่าเริ่มต้นในขณะที่กำลังสร้าง ในการแนบผู้สมัครสมาชิก ผู้เผยแพร่สามารถรับค่าจากเมธอดsend (: ) เช่นเดียวกับ PassthroughSubject ค่าปัจจุบันของผู้จัดพิมพ์สามารถเข้าถึงได้โดยใช้คุณสมบัติค่า สามารถใช้เหมือนกันเพื่อกำหนดค่าปัจจุบันใหม่ให้กับผู้จัดพิมพ์

ตัวอย่างด้านบนแสดงให้เห็นว่าผู้เผยแพร่เริ่มต้นด้วยค่าเริ่มต้น 0 เช่นเดียวกับ PassthroughSubject เรายังสามารถส่งค่าไปยังผู้เผยแพร่โดยใช้ เมธอด send (: )

คุณสมบัติค่าใน CurrentValueSubject กำลังถูกใช้เพื่อรับค่าปัจจุบันและเพื่อกำหนดค่าปัจจุบันตามที่กล่าวไว้

เอาท์พุต:

การสมัครสมาชิก

ผู้เผยแพร่ที่สมัครสมาชิกโดยสมาชิกเรียกว่าการสมัครสมาชิก การสมัครสมาชิกยืนยันโปรโตคอล " ยกเลิกได้ "

[หมายเหตุ: ขอแนะนำให้ยกเลิกการสมัครรับข้อมูลเมื่อผู้สมัครสมาชิกไม่ต้องการรับมูลค่าจากผู้จัดพิมพ์อีกต่อไป สามารถยกเลิกได้โดยใช้วิธี “ยกเลิก” หากไม่มีการเรียกอย่างชัดเจน จะหยุดการสมัครสมาชิกก็ต่อเมื่อผู้เผยแพร่ดำเนินการเสร็จสิ้น]

เอาท์พุต:

ฉันหวังว่าฉันได้ครอบคลุมข้อมูลพื้นฐานบางอย่างที่จะช่วยให้คุณรู้จัก Publisher และ Subscriber มีความสุขในการเรียนรู้!

ขอบคุณ :)