2017-04-14 19 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にいくつかの実装を追加したいが、私はSomeTableView

somePropertyのように他のいくつかの追加の性質を持っているそして、そう私はちょうどこのような何かを行うことができることを知っているので、別のプロトコルとしてではなくUITableViewDelegateなど

@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 } 
} 

あなたはおそらくのUITableViewを含むカスタムUIViewサブクラスを作成し、きれいな方法(すなわち:2つのデリゲートのプロパティを公開していない)でこれを行うにしたいと思います。次に、タイプのdelegateという名前の独自のプロパティを追加して、内部的にタイプをテーブルビューデリゲートとの間でキャストします。このようにして、UITableViewのデリゲートプロパティを変更するデリゲートプロパティを2つ公開することはありません。

+0

UITableViewを含むカスタムサブクラスは、これを行う最善の方法のように見えます。ありがとう、それは今まで私には起こらなかった、私が推測するトンネルビジョン –

関連する問題