Я пытаюсь отделить dataSource и делегат от viewController, чтобы предотвратить недопустимость viewController. Я прочитал несколько постов и обнаружил, что я могу отделить DataSource, как показано ниже, создать класс для представления dataSource
:Как отделить dataSource и делегат от класса viewController в Swift?
import UIKit
class DataSource: NSObject, UITableViewDataSource, UITableViewDelegate {
var movies = [String]()
//MARK: - UITableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return movies.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = movies[indexPath.row]
return cell
}
}
Мой вопрос: Что я должен делать, если я хочу использовать свойства или вызывать методы viewController
класса в DataSource
класс? Например, я хочу назвать presentViewController
, когда пользователь выбирает ячейку:
func tableView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
//do something here
presentViewController(viewController!, animated: true, completion: nil)
}
Почему не расширение для каждого протокола в том же файл? – vadian
@vadian Как сохранить свойства Если я использую расширение? например, 'var movies = [String]()' Я не буду хранить эти свойства в классе viewController – luiyezheng
OK, свойство для массива источников данных должно быть объявлено в контроллере представления, но это меньшее зло, чем танец для передавать все необходимые ссылки туда и обратно. – vadian