Assistant Editor
(Помощник редакто
-
ра) в Xcode. Щелкните кнопку
Assistant Editor
(Помощник редактора) вверху
справа в окне проекта. В результате откроется исходный код
CatalogViewCon
troller
.
Теперь, когда контроллер представления активен в обоих окнах, наведите
указатель мыши на табличное представление, нажмите клавишу
Ctrl
и, удер
-
живая ее, нажмите левую кнопку мыши. Перетащите соединение в окно кода,
как вы делали это, подключая кнопку перехода к экрану каталога в предыду
-
щей главе, прямо под определение класса
CatalogViewController
, как показано
ниже, и отпустите кнопку мыши:
class CatalogViewController: UIViewController {
// Перетащите связь сюда, в эту строку
override func viewDidLoad() {
super.viewDidLoad()
// Выполните здесь дополнительные настройки представления.
}
}
Появится модальный диалог с вопросом, желаете ли вы создать выход, опре
-
деляющий связь между контроллером и конкретным представлением, или
действие для обработки управляющего события (например, нажатия кнопки).
Оставьте все как есть и дайте новому выходу имя
tableView
.
Теперь определение
CatalogViewController
должно выглядеть так:
class CatalogViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
Динамические данные в представлениях списков
297
super.viewDidLoad()
// Выполните здесь дополнительные настройки представления.
}
}
Мы добавили в раскадровку связь между контроллером представления и на
-
шим табличным представлением. Это необходимо для настройки источника
данных в табличном представлении внутри класса контроллера. Вот как это
делается:
class CatalogViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
lazy var dataSource: ListDataSource = {
return ListDataSource()
}()
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = dataSource
}
}
Рассмотрим данный код подробнее.
Первое, на что следует обратить внимание, – мы добавили в
CatalogViewCon
troller
новое свойство
dataSource
с отложенной инициализацией (
lazy
). Опе
-
ратор
lazy
откладывает создание экземпляра объекта до первой попытки
обратиться к свойству. Это общепринятая практика для источников данных,
потому что для их создания и инициализации может потребоваться значи
-
тельное время. В нашем случае используется легковесный источник данных,
но сам прием стоит того, чтобы взять его на вооружение. Кроме того, оператор
lazy
позволяет добавить код инициализации. В данном случае мы просто соз
-
даем новый экземпляр
ListDataSource
.
Также мы добавили новый код в
viewDidLoad
. Этот метод является одним из
обработчиков событий жизненного цикла представления; когда он вызывает
-
ся, можно с уверенностью утверждать, что все выходы и действия подключены
и все представления загружены. Этот метод вызывается только один раз в те
-
чение жизни представления, и это нормально, потому что он нужен лишь один
раз.
Внутри
viewDidLoad
мы записываем в свойство
dataSource
табличного пред
-
ставления ссылку на источник данных, созданный внутри контроллера. Если
теперь собрать и запустить приложение, вы увидите, что каталог загружается,
как и раньше.
У кого-то из вас может возникнуть вопрос: «Зачем все эти сложности с соз
-
данием полноценного слоя данных? Разве не проще, когда контроллеры пере
-
дают данные предоставлениям напрямую?»
Скажем честно: проще.
Но давайте не будем забывать, что в нашем приложении все еще использу
-
ются статические данные. Подумайте, что случится, когда мы перейдем к ис
-
пользованию динамических данных и вы поймете, какие возможности откры
-
вает отделение данных от слоя представления!
Do'stlaringiz bilan baham: |