我正在通过重写自定义tableview实现来练习快速协议。
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”的值?
谢谢
答案 0 :(得分:1)
我相信您是在问如何使用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)")
}
}
}
例如,当您使用表格视图时,必须将View Controller分配为数据源。因此,您需要一个数据源变量来将委托分配给该变量。而且,当您要访问一个节中的项目数时,可以在数据源上调用该函数。
在此示例中,我将协议更改为class
协议,并使数据源变量变弱,我建议这样做。