我正在对 UITableView 进行子类化,我想更改其中一个变量以适合我的协议(protocol)委托(delegate)。
@objc protocol SomeTableViewDelegate: class, UITableViewDelegate {
/**
some documentation here
*/
optional func didChangeValue(someTableView: SomeTableViewDelegate)
/**
some documentation here
*/
optional func someDelegateFunction(someTableView: SomeTableViewDelegate)
}
class SomeTableView: UITableView {
override weak var delegate: SomeTableViewDelegate? // basically this is what I want to do
var someProperty: Int = 0
}
我想向 UITableViewDelegate
添加一些实现,但作为另一个协议(protocol)而不是 UITableViewDelegate,因为我在 SomeTableView
上添加了一些其他属性,例如 someProperty
是的,我知道我可以做这样的事情
@objc protocol SomeTableViewDelegate: class {
... some functions here
}
class SomeTableView: UITableView {
override weak var stDelegate: SomeTableViewDelegate?
}
这在某种程度上是可能的吗?
最佳答案
我不认为你可以直接覆盖它。但是,您可以做的是创建一个类型为 SomeTableViewDelegate
的附加属性,但当然要使用不同的名称。该属性可以充当托儿并改为设置委托(delegate)属性。像这样的东西:
weak var myTableViewDelegate: SomeTableViewDelegate? {
get { return self.delegate as? SomeTableViewDelegate }
set { self.delegate = newValue }
}
如果您想以更简洁的方式执行此操作(即:不要公开 2 个委托(delegate)属性),也许可以创建一个包含 UITableView 的自定义 UIView
子类。然后,您可以添加自己的属性,其名称为 delegate
,类型为 SomeTableViewDelegate
,并且在内部它会将类型转换为 TableView 委托(delegate)或从 TableView 委托(delegate)转换。这样你就不会公开两个委托(delegate)属性,它们都改变了 UITableView 的委托(delegate)属性。
关于ios - 如何更改子类上的变量数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43407862/