我是子类,例如UITableView,我想改变它的一个变量以适应我的协议委托。
@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
但是作为另一个协议而不是UITableViewDelegate,因为我在SomeTableView
上有一些其他添加的属性,如someProperty
是的,我知道我可以做这样的事情
@objc protocol SomeTableViewDelegate: class {
... some functions here
}
class SomeTableView: UITableView {
override weak var stDelegate: SomeTableViewDelegate?
}
这有可能吗?
答案 0 :(得分:1)
我认为你不能直接覆盖它。但是,您可以创建一个类型为SomeTableViewDelegate
的附加属性,但当然使用不同的名称。该属性可以充当shill并设置委托属性。类似的东西:
weak var myTableViewDelegate: SomeTableViewDelegate? {
get { return self.delegate as? SomeTableViewDelegate }
set { self.delegate = newValue }
}
如果您想以更干净的方式执行此操作(即:不要公开2个委托属性),可能需要创建一个包含UITableView的自定义UIView
子类。然后,您可以使用类型为delegate
的名称SomeTableViewDelegate
添加自己的属性,并在内部将类型转换为表视图委托。这样,您就不会公开2个委托属性,这两个属性都会更改UITableView上的委托属性。