当前位置: 首页 > 知识库问答 >
问题:

Swift数组与集合的一致性

仲高超
2023-03-14

给定两个符合Codable,Equatable和Hashable的RandomModelObject数组,我想计算它们之间的差异,并在UICollectionView中动画化内容更改。由于必须支持iOS 11,我选择https://github.com/tonyarnold/differ作为这样做的依赖项。

此代码:

class ScreenNameCollectionViewDataSource {
    var elements: [RandomModelObject] = []
}

extension ScreenNameViewController: ScreenNameViewModelDelegate {
    func elementsStoreUpdated() {
        collectionView.animateItemAndSectionChanges(oldData: dataSource.elements,
                                                    newData: viewModel.blablabla, 
                                                    updateData: {
            dataSource.elements = viewModel.blabla
        })
    }
}

产生2个错误:

Instance method 'animateItemAndSectionChanges(oldData:newData:indexPathTransform:sectionTransform:updateData:completion:)' requires that 'RandomModelObject.Element' conform to 'Equatable'

Instance method 'animateItemAndSectionChanges(oldData:newData:indexPathTransform:sectionTransform:updateData:completion:)' requires that 'RandomModelObject' conform to 'Collection'

这些错误似乎没有给我指明任何地方--数组是一个集合,模型符合Equatable。我错过什么了吗?

共有1个答案

饶骁
2023-03-14

您正在使用AnimateItemandSectionChanges,这不仅要求T是一个集合,而且还要求T元素集合。换句话说,T需要是类似于2D数组的东西。

这是因为AnimateItemandSectionChanges同时处理行和节。2D集合将告诉方法新旧行和节是什么。每个“inner”集合代表一个节。

由于您的数据源是一个1D数组,因此您似乎只需要AnimateRowChanges,这是用于单节表视图的。

如果每个RandomModelObject实际上表示一个节,那么您需要将其中的每个映射到一个数组,以便获得一个[[Something]],并相应地更改UpdateData闭包。

 类似资料:
  • 问题内容: 关于so​​rt()的Collections与Arrays这两个关于sort()方法的区别是什么?我知道Arrays的sort()使用二进制搜索进行sort(),那么Collections呢?以及如何选择使用哪个?谢谢! 问题答案: 那么,除了在不同的东西操作(操作上,以及在阵列上运行),简单地调用做繁重。 另外,请注意运行合并排序的价值。

  • 基本上,我有一组顶点ID,我想遍历并从某些外边找到一组顶点。我想把外边后面的顶点与它来自的准确性联系起来。例如:,所以v1有2个输出边(e1和e2)到v2和v4,而v3有2个输出边(e3和e4)到v5和v6。我想要的是得到如下所示的遍历结果 有人能帮我使用Gremlin遍历吗?最接近的例子是

  • 在连续情景中,我们不得不处理函数的集合和函数的系集。由函数集的名字可以看出,它就是一组函数,通常是一个变量——时间的函数。为描述函数集,我们可以给出集合中各种函数的显式表达式,也可以给出只有集合中的函数才拥有的性质。下面是一些示例: 由以下函数组成的集合: 。 的每个具体值确定了集合中的一个特定函数。 一个由时间函数组成的集合,其中包含频率不超过W周期/秒的所有时间函数。 一个由带宽局限于W、幅度

  • 返回两个数组中的任何一个元素。 用数组 a 和 b 的所有值创建一个 Set 对象,并转换成一个数组。 const union = (a, b) => Array.from(new Set([...a, ...b])); union([1, 2, 3], [4, 3, 2]); // [1,2,3,4]

  • 问题内容: 我是否可以使用任何标准库调用来对两个数组执行集合操作,或者自己实现这种逻辑(在功能上和效率上都尽可能理想)? 问题答案: 是的,Swift 上课了。 Swift 3.0+可以对集合执行以下操作: Swift 2.0可以计算数组参数: Swift 1.2+可以在集合上进行计算: 如果使用自定义结构,则需要实现Hashable。 感谢Michael Stern在Swift 2.0更新的评论

  • 本文向大家介绍java集合与数组的相同点和不同点,包括了java集合与数组的相同点和不同点的使用技巧和注意事项,需要的朋友参考一下 数组: 数组可以用来保存多个基本数据类型的数据,也可以用来保存多个对象。 数组的长度是不可改变的,一旦初始化数组时就指定了数组的长度(无论是静态初始化还是动态初始化)。 数组无法保存具有映射关系的数据。 集合: 集合是只用于存储数量不等的对象。 集合的长度是可变的。

  • 我尝试在和中排序一个大小为100000000的数组,我可以看到它们之间存在巨大的性能差距。对于这个数字,几乎比快倍(在我的机器上)。 我记录了一些结果,发现当大小在10000左右或更小时,swift的速度更快,但一旦数值上升,就会变得比慢得多。 下面是Swift和Kotlin的代码, 迅捷 科特林 下面是两个记录的时间, 迅捷 因此,在这里,您可以看到在大小增加时变得极其缓慢,尽管在数量较小时它会

  • 假设有几个数组: 我需要找出所有可能的元素集合(1,2,3,4,5...)中的每一个在至少两个阵列(A,B,C....)并以下列方式显示它们: 实际输入是包含字符串的文件。可能有数千个文件,每个文件可能包含一百多个密钥字符串。 我尝试了下面的方法:首先,我通过比较所有可能的数组对来生成元素集。然后,我试图通过使用逻辑生成其他集合——元素集合的交集在数组集合的并集中很常见。像这样: 从上面我们可以得