Tôi đã làm việc thông qua một hướng dẫn Ray Wenderlich và nhận thấy rằng tác giả sử dụng các phần mở rộng lớp để giữ các cuộc gọi lại đại biểu thay vì xử lý chúng trong chính lớp đó, ví dụ:
cuộc gọi lại đại biểu bên trong lớp mở rộng:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
trái ngược với việc nó được chứa trong lớp:
cuộc gọi lại đại biểu trong lớp:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
Tôi thấy điều này kỳ lạ và thú vị cùng một lúc. Anh ta có một tệp dành riêng cho các phần mở rộng trên lớp LogsViewControll có tên "LogsViewControllExtension.swift" và có một phần mở rộng khác nhau cho mỗi giao thức đại biểu: UITableViewDataSource, UISplitViewDelegate, v.v.
nhiều phần mở rộng lớp mỗi cuộc gọi lại ủy nhiệm trong tệp riêng của mình:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
Tại sao?
Những lợi thế là gì để làm điều này? Tôi có thể thấy nơi nào có thể dễ đọc hơn một chút để phân tách điều này nhưng đồng thời nó là một mức độ không xác định. Có nguyên tắc OO nào hỗ trợ hoặc chống lại việc này không?