swift - 如何声明泛型基类?
问题描述
我有一个案例是:
class BaseMvpController<V, P: BasePresenter>: UIViewController { }
我需要使基类成为泛型类型而不是 UIViewController
.
在某些时候,我需要它是UIViewController , UITableViewController
..etc
例如 :
我的基类
class BaseMvpController<V, P: BasePresenter>: UIViewController {
typealias View = V
private(set) var presenter: P!
// MARK: - Initializers
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override public init(nibName: String?, bundle: Bundle?) {
super.init(nibName: nibName, bundle: bundle)
}
deinit {
guard let view = self as? P.View else {return}
if let presenter = presenter {
presenter.detachView(view)
}
}
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
presenter = createPresenter()
}
override func viewWillAppear(_ animated: Bool) {
guard let view = self as? P.View else {
preconditionFailure("MVP ViewController must implement the view protocol `\(View.self)`!")
}
super.viewWillAppear(animated)
if !presenter.isAttached {
presenter.attachView(view)
}
}
// MARK: - MVP
/// Override and return a presenter in a subclass.
func createPresenter() -> P {
preconditionFailure("MVP method `createPresenter()` must be override in a subclass and do not call `super.createPresenter()`!")
}
}
我的控制器
class AController : BaseMvpController <AView, APresenter> { }
如果我们认为它是一种 UIViewController 它可以正常工作
我的控制器
class BController : BaseMvpController <AView, APresenter> { }
如果我们认为它是一种
UITableViewController
,这是我不能覆盖numberOfItemInRaw
和 dequeCell ...等的情况,因为基本控制器继承自UIViewController
我想让 Base 控制器适用于所有控制器(UIViewController
, UITableViewController
, UICollectionViewController
.. 等)。
我怎样才能做到这一点
解决方案
您可以在另一个类中“隐藏”泛型。
例如,
class Generic<T, U> { }
class BV: UIViewController {
var generic: Generic<Int, String>? = nil
}
推荐阅读
- firebase - React Native:在文本输入字段中显示用户数据
- qr-code - YOURLS 是否允许您使用 API 生成 QR 码?
- php - Windows IIS Web 服务器上的随机 Dropzone 错误
- javascript - 在 php 中从 iframe 编辑主页变量值
- django - Django - 如何忽略自动模型语言过滤器
- javascript - 尝试在反应中使用异步声明但在构建中出错
- python - 创建一个闭源 Python 程序
- go - 如何解决 bufio.Scanner.Scan 耗尽 io.Reader
- python - pandas 通过添加新列分组并计算总数
- abap - 如何以高效的方式迭代 ABAP 中的字符串字符?