gpt4 book ai didi

ios - 无法避免子类化

转载 作者:行者123 更新时间:2023-11-28 05:52:21 25 4
gpt4 key购买 nike

我有一个带有多个 View Controller 的应用程序。我正在实现一个搜索栏来导航每个 View Controller 中的 TableView

我选择使用自定义类来实现搜索 Controller ,我在其中处理所有搜索逻辑。为了使这成为可能,我目前正在使用每个 View Controller 继承的父类(super class)。我想知道是否有办法无需子类化来完成这项工作。

这是我的 SearchController 类的当前实现:

class SearchController: NSObject, UISearchBarDelegate {

/* This is the trouble spot. If I change this to UIViewController?,
I get the compiler error "value of type UIViewController has no member tableView" */
weak var viewController: BaseViewController?

/*
... rest of SearchController implementation

includes methods that interact with view controller table views
*/
}

这是 BaseViewController 类:

class BaseViewController: UIViewController {

let searchController = SearchController()
let tableView = UITableView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)

/*
... rest of BaseViewController implementation
*/

}

总而言之,我遇到的问题是我有几个带有 TableView 的 View Controller ,如果不创建它们可以继承的新基类,我似乎无法完成这项工作。使用 UIViewController 根本行不通,因为 UIViewController 类没有内置 tableView 属性。

有什么想法吗?

最佳答案

您不需要强制所有的 viewControllers 成为 BaseViewController 的子类。如果唯一的要求是 viewController 有一个 tableView 属性,那么定义一个符合该要求的协议(protocol),并使相关的 viewController 实现该协议(protocol)。重写你的例子:

protocol BaseControllerProtocol: class {
var tableview: UITableView { get }
}

class SearchController: NSObject, UISearchBarDelegate {

//We store any class that implements the BaseControllerProtocol protocol
//Now you can use viewController.tableview
weak var viewController: BaseControllerProtocol?
//If you what to have UIViewcontrollers instances only use:
//weak var viewController: (UIViewController & BaseControllerProtocol)?
}

//An example of a viewcontroller that implements the BaseControllerProtocol
class ARandomViewController : UIViewController, BaseControllerProtocol {
var tableview: UITableView = UITableView()
}

关于ios - 无法避免子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com