быстрый протокол со значением по умолчанию - PullRequest
0 голосов
/ 05 декабря 2018

Я практикую быстрые протоколы, переписывая пользовательскую реализацию табличного представления.

protocol PreviewModuleViewDataSource {
    func previewModuleView(_ moduleView: PreviewModuleView, numberOfItemsInSection section: Int) -> Int
    func previewModuleView(_ moduleView: PreviewModuleView, cellForItemAt indexPath: IndexPath) -> PreviewModuleViewItem
}

У меня есть протокол для количества элементов в разделе и "ячейка для элемента" в пути индекса.

Затем я расширяю свой протокол следующим образом:

func previewModuleView(_ moduleView: PreviewModuleView, numberOfItemsInSection section: Int) -> Int {
        return dataSource.count
    }

    func previewModuleView(_ moduleView: PreviewModuleView, cellForItemAt indexPath: IndexPath) -> PreviewModuleViewItem {

        let item = PreviewModuleViewItem()
        item.image = UIImage(named: "ItunesArtwork")

        return item

    }

Мой вопрос заключается в том, как я могу получить значение «dataSource.count» в своем базовом классе, который будет использовать данные?

Спасибо

1 Ответ

0 голосов
/ 06 декабря 2018

Я полагаю, вы спрашиваете, как использовать значение, возвращаемое из func previewModuleView(_ moduleView: PreviewModuleView, numberOfItemsInSection section: Int) -> Int в объекте PreviewModuleView?

protocol PreviewModuleViewDataSource: class {
    func previewModuleView(_ moduleView: PreviewModuleView, numberOfItemsInSection section: Int) -> Int
    func previewModuleView(_ moduleView: PreviewModuleView, cellForItemAt indexPath: IndexPath) -> PreviewModuleViewItem
}

class PreviewModuleView {
    weak var dataSource: PreviewModuleViewDataSource?

    func useValueExample() {
        if let numberOfItems = dataSource?.previewModuleView(self, numberOfItemsInSection: 0) {
            print("Number of items in section 0 = \(numberOfItems)")
        }
    }
}

Например, когда вы используете табличное представление, вам нужно назначитьПосмотреть контроллер в качестве источника данных.Таким образом, вам нужна переменная источника данных для назначения делегата.И когда вы хотите получить доступ к количеству элементов в разделе, вы вызываете эту функцию для источника данных.

В этом примере я изменил протокол на протокол class и сделал переменную источника данных слабойчто-то, что я бы порекомендовал.

...