如何在子类

时间:2017-04-14 08:22:02

标签: ios swift xcode subclass

我是子类,例如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?

}

这有可能吗?

1 个答案:

答案 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上的委托属性。