ในบทความนี้ คุณจะได้เรียนรู้เกี่ยวกับผู้รับมอบสิทธิ์และการสร้างผู้รับมอบสิทธิ์ ก่อนอื่นเลย
ผู้รับมอบสิทธิ์คืออะไร
ผู้รับมอบสิทธิ์เป็นคำง่ายๆ ที่อ้างถึงการสื่อสารระหว่างอ็อบเจ็กต์ เป็นวิธีง่ายๆ ในการเชื่อมต่อวัตถุและการสื่อสารระหว่างกัน
ผู้รับมอบสิทธิ์ทำงานอย่างไร
ผู้รับมอบสิทธิ์ถูกสร้างขึ้นด้วยความช่วยเหลือของโปรโตคอล มีการประกาศโปรโตคอลในคลาส ซึ่งจะมีเหตุการณ์เกิดขึ้น ซึ่งควรแจ้งให้คลาสอื่นทราบ ในโปรโตคอล เราเขียนการประกาศฟังก์ชันและกำหนดไว้ภายในคลาสการเรียก
จะสร้างผู้รับมอบสิทธิ์ได้อย่างไร
เราจะทำสิ่งนี้ด้วยความช่วยเหลือของโครงการตัวอย่าง
ขั้นตอนการดำเนินการ -
-
สร้างคลาส ตั้งชื่อเป็น FirstViewController สร้างคลาสอื่น และเรียกมันว่า SecondViewController สร้างตัวควบคุมการดูที่เกี่ยวข้องในกระดานเรื่องราว
-
ประกาศโปรโตคอลใน SecondViewController โปรโตคอลจะถูกประกาศนอกคลาสหรืออ็อบเจกต์อื่นๆ
protocol SecondViewControllerDelegate { func buttonPressedInVC2() }
-
ใน SecondViewController ให้สร้างออบเจ็กต์ทางเลือกของผู้ได้รับมอบสิทธิ์ที่เราเพิ่งสร้างขึ้น
var delegate: SecondViewControllerDelegate?
-
เราจำเป็นต้องเรียกใช้ฟังก์ชันที่ประกาศไว้ในโปรโตคอล เมื่อเหตุการณ์บางอย่างเกิดขึ้นใน SecondViewController ให้สร้างเหตุการณ์ที่เกิดขึ้นเมื่อกดปุ่มในตัวควบคุมมุมมองที่สอง
@IBAction func buttonTapped(_ sender: UIButton) { self.delegate?.buttonPressedInVC2() self.navigationController?.popViewController(animated: true) }
ทั้งหมดนี้จำเป็นใน SecondViewController ตอนนี้เรามาทำงานกับ FirstViewController กัน
-
เราจำเป็นต้องปฏิบัติตาม/ปรับใช้ FirstViewController กับ SecondViewControllerDelegate แล้วระบบจะขอให้คุณเพิ่มต้นขั้วโปรโตคอลโดยอัตโนมัติ
extension FirstViewController: SecondViewControllerDelegate { func buttonPressedInVC2() { } }
-
ภายในโปรโตคอลที่เราเพิ่งดำเนินการ เราควรเขียนโค้ดที่เราต้องการดำเนินการเมื่อการดำเนินการของผู้รับมอบสิทธิ์นี้เกิดขึ้น
มาสร้างป้ายกำกับใน FirstViewController และเปลี่ยนข้อความเมื่อเรียกวิธีการมอบหมาย
extension FirstViewController: SecondViewControllerDelegate { func buttonPressedInVC2() { self.lblOne.text = "Delegate Implemented" } }
-
ขั้นตอนสุดท้ายที่เหลือคือ วัตถุผู้รับมอบสิทธิ์ใน SecondViewController เป็นทางเลือกและจะเป็นศูนย์จนกว่าจะได้รับมอบหมาย ดังนั้นใน FirstViewController เราจะกำหนดวัตถุนั้นในขณะที่เปลี่ยนจาก FirstViewController เป็น SecondViewController
มาสร้างปุ่มใน FirstViewController กัน
@IBAction func goToNextVC(_ sender: Any) { let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController vc.delegate = self self.navigationController?.pushViewController(vc, animated: true) }
-
และถ้าคุณยังไม่รู้ เราต้องฝัง FirstViewController ใน Navigation Controller เรียกใช้แอปและดูว่ามันทำงานอย่างไร