ฉันทำงานผ่านการสอนของ Ray Wenderlich และสังเกตว่าผู้เขียนใช้ส่วนขยายคลาสเพื่อระงับการโทรกลับแทนที่จะมอบหมายให้จัดการในคลาสเองเช่น:
มอบหมาย callback ภายในส่วนขยายของชั้นเรียน:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
ตรงข้ามกับการมีอยู่ในชั้นเรียน:
มอบหมายการเรียกกลับภายในชั้นเรียน:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
ฉันพบสิ่งนี้แปลกและน่าสนใจในเวลาเดียวกัน เขามีไฟล์เฉพาะสำหรับการขยายในคลาส LogsViewController ชื่อ "LogsViewControllerExtension.swift" และมีส่วนขยายที่แตกต่างกันสำหรับแต่ละโพรโทคอลของผู้แทน: UITableViewDataSource, UISplitViewDelegate ฯลฯ เช่น:
มีหลายนามสกุลคลาสแต่ละตัวเรียกกลับพร้อมตัวแทนภายในไฟล์ของตัวเอง:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
ทำไม?
มีข้อดีอะไรในการทำสิ่งนี้? ฉันสามารถดูว่ามันอาจจะสามารถอ่านได้มากกว่าที่จะแยกออก แต่ในเวลาเดียวกันมันเป็นระดับของการอ้อม มีหลักการ OO ที่สนับสนุนหรือต่อต้านการทำเช่นนี้หรือไม่?