2016-10-11 13 views
0

これは子クラス内のプロトコルを実装するメソッドが呼び出されないのはなぜですか?

class A: NSObject, UITableViewDelegate { 
    var tableView = UITableView() 
    override init() { 
     super.init() 
     tableView.delegate = self 
    } 
} 

class B: A { 
    var count = 0 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     count += 1 
    } 
} 

この例のように「子」クラスで呼び出されることは決してありませんdidSelectRowAt方法UITableViewDelegateの方法を実装する場合、迅速3に自分のプロジェクトを更新している間、私が遭遇した新しい動作です:

let b = B() 
b.tableView.delegate!.tableView?(b.tableView, didSelectRowAt: IndexPath()) 
b.count // => 0 
を私は親のメソッドを実装し、子供にそれをオーバーライドする場合

しかし、それは作業を開始:

class A: NSObject, UITableViewDelegate { 
    var tableView = UITableView() 
    override init() { 
     super.init() 
     tableView.delegate = self 
    } 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    } 
} 

class B: A { 
    var count = 0 
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     count += 1 
    } 
} 

let b = B() 
b.tableView.delegate!.tableView?(b.tableView, didSelectRowAt: IndexPath()) 
b.count // => 1 

私は自分自身のプロトコルと "テーブル"クラスを提供することで例をさらに単純化しようとしましたが、同じように振る舞うことができませんでした。これは、この例で観察された動作が期待されておらず、実際にはバグであると私に信じさせる。

誰か他に同じ(または類似の)問題が発生しましたか?これが誰にも役立つかどうかを尋ねる価値があると私は思った。

+0

なぜあなたのテーブルビューのデリゲートにはテーブルビューのインスタンスがありますか。それはあまり意味がない – Alexander

答えて

関連する問題