如何正确地清理我的代码使用MVC?



基本上,我有以下代码在TableViewController这基本上是重复在另一个CollectionViewController除了一些额外的行:

func configureSearchController() {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Albums"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
searchController.searchBar.delegate = self
}
为了清理两个控制器中的代码,我想将这些方法移动到一个新文件中,如下所示:
class SearchBarManager: UIViewController {
func configureAlbumSearchController(_ searchController: UISearchController, _ navigationItem: UINavigationItem) {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Albums"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
}
func configurePhotoSearchController(_ searchController: UISearchController, _ navigationItem: UINavigationItem) {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Photos"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
searchController.searchBar.scopeButtonTitles = ["1 Column", "2 Columns", "3 Columns"]
searchController.searchBar.selectedScopeButtonIndex = 2
}}

这样做合适吗?我觉得有一种更简单的方法来简化我想要完成的事情,但我不确定。提前感谢!

保持代码整洁是非常重要的,它使您能够重用代码。要实现这一点,你可以使用一些常见的设计模式,如策略,你可以使用面向协议的编程。

我将留下一些资源,以便您可以更深入地了解如何通过使用SOLID原则实现此目标:https://medium.com/ios-expert-series-or-interview-series/solid-design-principle-using-swift-34bb1731cfb3

在这种情况下,您需要的是一个简单的抽象,您需要创建一个能够配置任何SearchController的函数。我将给你一个例子,但不要让这个例子限制你,还有许多其他(和更好的方法)来实现这一点。
class SearchBarManager: UIViewController {
private func configureSearchController(searchController: UISearchController, navigationItem: UINavigationItem, title: String, scopeButtonTitles: [String] = [], selectedScopeButtonIndex: Int = 0) {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = title
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
searchController.searchBar.scopeButtonTitles = scopeButtonTitles
searchController.searchBar.selectedScopeButtonIndex = selectedScopeButtonIndex
}

func configureAlbumSearchController(_ searchController: UISearchController, _ navigationItem: UINavigationItem) {
configureSearchController(searchController: searchController, navigationItem: navigationItem, title: "Search Albums")
}
func configurePhotoSearchController(_ searchController: UISearchController, _ navigationItem: UINavigationItem) {
configureSearchController(searchController: searchController, navigationItem: navigationItem, title: "Search Photos", scopeButtonTitles: ["1 Column", "2 Columns", "3 Columns"], selectedScopeButtonIndex: 2)
}
}

最新更新