很难理解UICollectionViewDiffableDataSource中的闭包,特别是传递给它的内容。我能找到的所有教程都解释了应该输入什么,但没有解释为什么,而且我对Swift和编程还有点陌生。
我跟着保罗·哈德森( Paul )的教程 (他正在制作一个由App对象组成的应用商店),在createDataSource()中他写道:
dataSource = UICollectionViewDiffableDataSource<Section, App>(collectionView: collectionView)
{ collectionView, indexPath, app in
//rest of the closure
}我对闭包参数的困惑是关于它们来自何处:
collectionView声明为全局变量。所以我想这是传递这个的必要条件吗?indexPath是从哪里来的?app是什么?据我所知,它在任何地方都没有声明。在我见过的所有教程中都是这样的。App实例的概念是从哪里来的?谢谢任何人谁能帮助我掌握这一点,我一直在研读教程,但这是很难搞清楚这里的机械。
发布于 2021-06-30 19:15:19
这是对象的初始化程序。看起来是这样的:
UICollectionViewDiffableDataSource<<#SectionIdentifierType: Hashable#>, <#ItemIdentifierType: Hashable#>>(collectionView: collectionView)它使用的泛型是这样提供的<节,本例中的App>节被定义为:
import Foundation
struct Section: Decodable, Hashable {
let id: Int
let type: String
let title: String
let subtitle: String
let items: [App]
}在本例中,应用程序在应用程序中定义如下:
import Foundation
struct App: Decodable, Hashable {
let id: Int
let tagline: String
let name: String
let subheading: String
let image: String
let iap: Bool
}这些类型提供给初始化程序以满足泛型init的类型要求。
注意,对象现在了解如何从UICollectionView获取信息。
它现在可以用参数调用块:
查看泛型类型,以获得更好的理解。
https://docs.swift.org/swift-book/LanguageGuide/Generics.html
https://stackoverflow.com/questions/68200007
复制相似问题