2017-04-14 112 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的自定義子類看起來就像這樣做的最佳方式。謝謝,直到現在我還沒有想到,我猜想隧道視野 –