swift 具有默认值的协议

swift protocol with default value

我正在通过重写自定义表视图实现来练习 swift 协议。

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

我有部分中项目数的协议和索引路径中的 "cell for item"..

然后我像这样扩展我的协议:

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

    }

我的问题是如何在我的核心 class 中实际获得 "dataSource.count" 的值,它将使用数据?

谢谢

我相信您是在问如何在 PreviewModuleView 对象中使用从 func previewModuleView(_ moduleView: PreviewModuleView, numberOfItemsInSection section: Int) -> Int 返回的值?

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)")
        }
    }
}

例如,当您使用 table 视图时,您必须将视图控制器指定为数据源。因此,您需要一个数据源变量来将委托分配给。当你想访问一个部分中的项目数时,你可以在数据源上调用该函数。

在此示例中,我将协议更改为 class 协议并使数据源变量变弱,这是我推荐的做法。