UICollectionViewDiffableDataSource 闭包中的参数来自哪里?
Where do the parameters come from in the UICollectionViewDiffableDataSource closure?
无法理解 UICollectionViewDiffableDataSource
中的闭包,尤其是传递给它的内容。我能找到的所有教程都解释了要键入的内容,但没有解释 为什么 ,而且我对 Swift 和编程还是有点陌生。
我正在关注 Paul Hudson 的 tutorial(他正在制作一个由 App
对象组成的应用程序商店),在 createDataSource()
中他写道:
dataSource = UICollectionViewDiffableDataSource<Section, App>(collectionView: collectionView)
{ collectionView, indexPath, app in
//rest of the closure
}
我对闭包参数的困惑在于它们来自哪里:
- 他恰好在View Controller的其他地方声明了
collectionView
为全局变量。所以我想这是传递进来所必需的?
indexPath
从哪里来?
- 最令人困惑的是:它怎么知道
app
是什么?据我所知,它没有在任何地方声明。我看过的所有教程都是这样。 App
实例的概念来自哪里?
非常感谢任何能帮助我理解这一点的人,我一直在搜索教程,但很难弄清楚这里的机制。
这是对象的初始值设定项。它看起来像这样:
UICollectionViewDiffableDataSource<<#SectionIdentifierType: Hashable#>, <#ItemIdentifierType: Hashable#>>(collectionView: collectionView)
它使用的是这样提供的泛型
此示例中的部分定义为:
import Foundation
struct Section: Decodable, Hashable {
let id: Int
let type: String
let title: String
let subtitle: String
let items: [App]
}
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
}
这些类型被提供给初始化器以满足通用初始化的类型要求。
注意对象现在知道如何从 UICollectionView 获取信息。
现在可以调用带有参数的块:
- 您提供的集合视图。
- 项目的 IndexPath 通过按类型 Section 查询部分。
2a.通过查询collection view for type App in section.
的行信息
- 在 indexPath 处查询 App 实例的 collectionView。
查看通用类型以获得更好的理解。
https://docs.swift.org/swift-book/LanguageGuide/Generics.html
无法理解 UICollectionViewDiffableDataSource
中的闭包,尤其是传递给它的内容。我能找到的所有教程都解释了要键入的内容,但没有解释 为什么 ,而且我对 Swift 和编程还是有点陌生。
我正在关注 Paul Hudson 的 tutorial(他正在制作一个由 App
对象组成的应用程序商店),在 createDataSource()
中他写道:
dataSource = UICollectionViewDiffableDataSource<Section, App>(collectionView: collectionView)
{ collectionView, indexPath, app in
//rest of the closure
}
我对闭包参数的困惑在于它们来自哪里:
- 他恰好在View Controller的其他地方声明了
collectionView
为全局变量。所以我想这是传递进来所必需的? indexPath
从哪里来?- 最令人困惑的是:它怎么知道
app
是什么?据我所知,它没有在任何地方声明。我看过的所有教程都是这样。App
实例的概念来自哪里?
非常感谢任何能帮助我理解这一点的人,我一直在搜索教程,但很难弄清楚这里的机制。
这是对象的初始值设定项。它看起来像这样:
UICollectionViewDiffableDataSource<<#SectionIdentifierType: Hashable#>, <#ItemIdentifierType: Hashable#>>(collectionView: collectionView)
它使用的是这样提供的泛型
import Foundation
struct Section: Decodable, Hashable {
let id: Int
let type: String
let title: String
let subtitle: String
let items: [App]
}
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
}
这些类型被提供给初始化器以满足通用初始化的类型要求。
注意对象现在知道如何从 UICollectionView 获取信息。
现在可以调用带有参数的块:
- 您提供的集合视图。
- 项目的 IndexPath 通过按类型 Section 查询部分。 2a.通过查询collection view for type App in section. 的行信息
- 在 indexPath 处查询 App 实例的 collectionView。
查看通用类型以获得更好的理解。
https://docs.swift.org/swift-book/LanguageGuide/Generics.html