私はレイ・ウェンダリッヒのチュートリアルを進めていましたが、作者がクラス拡張機能を使用してデリゲートコールバックを保持していることに気付きました。
クラス拡張内のコールバックを委任する:
extension LogsViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
それをクラス内に含めるのではなく:
クラス内のコールバックを委任する:
class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
...
}
}
私はこれを同時に奇妙で面白いと感じました。「LogsViewControllerExtension.swift」という名前のLogsViewControllerクラスの拡張機能専用のファイルがあり、デリゲートプロトコルごとに異なる拡張機能があります:UITableViewDataSource、UISplitViewDelegateなど。
それぞれ独自のファイル内でコールバックを委任する複数のクラス拡張機能:
extension LogsViewController: UISplitViewControllerDelegate {
... callbacks
}
extension LogsViewController : UIPopoverPresentationControllerDelegate {
... callbacks
}
どうして?
これを行うことにはどのような利点がありますか?これを分離する方が少し読みやすいかもしれませんが、同時に間接的なレベルでもあります。これを支持する、または反対するオブジェクト指向の原則はありますか?