问题标签 [swift5.4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
50 浏览

swift - 如何使用与@resultbuilder 结合来构建动态collectionview 列表?

我想在 UIKit 中使用@resultbuilderCombine创建自己的反应式和声明式 UICollectionView 列表,类似于我们List {}在 SwiftUI 中得到的。

为此,我正在使用结果构建器来创建这样的快照:

我还需要使用以下扩展传递ListItemGroup给 SnapshotBuilder 并获取[ListItem]

我的List班级看起来像这样:

我在我的 ViewControllers 中使用它,如下所示:

如您所见,我List使用@Published var testItems变量初始化 my 。在我的init()func 中,我设置了一个订阅者并将它们存储在 中cancellables,这样我就可以对更改做出反应。

如果我将一个项目添加到testItems数组,则执行sink回调以创建一个新快照并将它们应用于data. 它有效,但我需要点击导航按钮两次,才能看到列表中的项目。两个问题:

  1. 为什么会发生这种情况,我该如何解决?(所以我只需点击一次按钮即可查看列表中的更改)
  2. 以及如何改进我的代码?(目前我总是创建一个新快照而不是扩展已经创建的快照)