首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UICollectionViewDiffableDataSource闭包中,参数来自哪里?

在UICollectionViewDiffableDataSource闭包中,参数来自哪里?
EN

Stack Overflow用户
提问于 2021-06-30 18:34:49
回答 1查看 92关注 0票数 1

很难理解UICollectionViewDiffableDataSource中的闭包,特别是传递给它的内容。我能找到的所有教程都解释了应该输入什么,但没有解释为什么,而且我对Swift和编程还有点陌生。

我跟着保罗·哈德森( Paul )的教程 (他正在制作一个由App对象组成的应用商店),在createDataSource()中他写道:

代码语言:javascript
复制
dataSource = UICollectionViewDiffableDataSource<Section, App>(collectionView: collectionView)
  { collectionView, indexPath, app in 
    //rest of the closure
  }

我对闭包参数的困惑是关于它们来自何处:

  • 他碰巧在View中将collectionView声明为全局变量。所以我想这是传递这个的必要条件吗?
  • indexPath是从哪里来的?
  • 最令人困惑的是:它如何知道app是什么?据我所知,它在任何地方都没有声明。在我见过的所有教程中都是这样的。App实例的概念是从哪里来的?

谢谢任何人谁能帮助我掌握这一点,我一直在研读教程,但这是很难搞清楚这里的机械。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-30 19:15:19

这是对象的初始化程序。看起来是这样的:

代码语言:javascript
复制
  UICollectionViewDiffableDataSource<<#SectionIdentifierType: Hashable#>, <#ItemIdentifierType: Hashable#>>(collectionView: collectionView)

它使用的泛型是这样提供的<节,本例中的App>节被定义为:

代码语言:javascript
复制
 import Foundation

  struct Section: Decodable, Hashable {
     let id: Int
     let type: String
     let title: String
     let subtitle: String
     let items: [App]
  }

在本例中,应用程序在应用程序中定义如下:

代码语言:javascript
复制
  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获取信息。

它现在可以用参数调用块:

  1. 您提供的集合视图。
  2. 通过按类型节查询节来查询项的IndexPath。2a。通过查询节中App类型的集合视图来提供行信息。
  3. 在collectionView上查询App的实例。

查看泛型类型,以获得更好的理解。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68200007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档