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
  }

我对闭包参数的困惑在于它们来自哪里:

非常感谢任何能帮助我理解这一点的人,我一直在搜索教程,但很难弄清楚这里的机制。

这是对象的初始值设定项。它看起来像这样:

  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 获取信息。

现在可以调用带有参数的块:

  1. 您提供的集合视图。
  2. 项目的 IndexPath 通过按类型 Section 查询部分。 2a.通过查询collection view for type App in section.
  3. 的行信息
  4. 在 indexPath 处查询 App 实例的 collectionView。

查看通用类型以获得更好的理解。

https://docs.swift.org/swift-book/LanguageGuide/Generics.html