如何更改子类上的变量数据类型

How to change variable data type on 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?

}

这在某种程度上可能吗?

我认为您不能直接覆盖它。但是,您可以做的是创建一个额外的 属性 类型 SomeTableViewDelegate,但当然要使用不同的名称。 属性 可以充当托儿,而是设置委托 属性。类似于:

weak var myTableViewDelegate: SomeTableViewDelegate? {
    get { return self.delegate as? SomeTableViewDelegate }
    set { self.delegate = newValue }
}

如果您想以更简洁的方式执行此操作(即:不要公开 2 个委托属性),或许可以创建一个包含 UITableView 的自定义 UIView 子类。然后,您可以添加自己的 属性,名称为 delegate,类型为 SomeTableViewDelegate,并且在内部它会将类型转换为 table 视图委托。这样你就不会公开两个委托属性,它们都改变了 UITableView 上的委托 属性。