2017-04-14 65 views
2

我是子类说例如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,因为我有一些其他的附加属性上SomeTableViewsomeProperty

是的,我知道我可以做这样的事情

@objc protocol SomeTableViewDelegate: class { 
    ... some functions here 
} 

class SomeTableView: UITableView { 

    override weak var stDelegate: SomeTableViewDelegate? 

} 

这是可能的某种方式?

回答

1

我不认为你可以直接覆盖它。但是,您可以执行的操作是创建类型的其他属性,但当然会使用不同的名称。该属性可以充当shill并改为设置委托属性。喜欢的东西:

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

如果你想这样做,在一个更清洁的方式(即:不要暴露2个代表属性),或者创建自定义UIView子类,包含一个UITableView。然后,您可以添加自己的属性delegate类型和内部它将投入和从表视图委托类型。这样你就不会公开两个委托属性,它们都会改变UITableView上的委托属性。

+0

包含UITableView的自定义子类看起来就像这样做的最佳方式。谢谢,直到现在我还没有想到,我猜想隧道视野 –