2016-09-20 4 views
0

現在、私はデータのための分離されたクラスを持っています。しかし、私はこのようなクラスを宣言することはできません:UIViewControllerとUITableViewDataSourceの両方を適合させる必要があるのはなぜですか?

class DataSource: UITableViewDataSource 

それは私に多くのエラーを与えるでしょう。そして、代わりにこれを行う必要があります:

class DataSource: UIViewController, UITableViewDataSource 

なぜですか?私はJavaのバックグラウンドから来ているので、なぜBを実装するためにAを実装しなければならないのかわかりません。私はAppleから公式の文書を読んでみましたが、答えを見つけることができませんでした。

編集:

Type 'DataSource' does not conform to protocol 'UITableViewDataSource' 
Type 'DataSource' does not conform to protocol 'NSObjectProtocol' 

と、XCodeのは、それを修正するための解決策は、オーバーライド機能の先頭に「@objc」を追加することであることを示唆している:ここでエラーです。しかし、修正後もまだエラーがあります。

編集2:データソースが機能するために2つの関数を実装する必要があることを認識しています。ただし、UIViewControllerを実装しなければ動作しません。

enter image description here

それはのUIViewControllerを追加した後に動作します!

enter image description here

+1

どのようなエラーがありますか?私は推測すべきでしょうか? – gnasher729

+0

エラー –

+0

を追加しただけで、データソースメソッド(numberOfRows、cellForRowsなど)を挿入する必要があります。 –

答えて

1

プロトコルUITableViewDataSourceNSObjectProtocolから来ています。だから、あなたのクラスはNSObjectProtocolに従うようにNSObjectから継承する必要があります。バニラスウィフトクラスはそうではありません。しかし、UIKitの多くの部分はNSObjectsを期待しています。また、このプロトコルの必要なメソッドを実装する必要があります。以下のコードを試してください:

class DataSource: NSObject, UITableViewDataSource { 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     return UITableViewCell() 
    } 
} 
関連する問題