Sav*_*viz 14 arrays swift swiftui
最近 Swift 有一个名为 move for Arrays 的新方法。我们可以使用它来配合 Swiftui 列表拖放列表移动。我的挑战是我不明白它是如何独立工作的,而且苹果公司的文档对此也很少。这是我在使用这个函数时注意到的一个奇怪的行为。
var array = ["a", "b" ,"c", "d"]
print("before \(array)\n")
array = ["a", "b" ,"c", "d"]
array.move(fromOffsets: IndexSet(integer: 2), toOffset: 1)
print("after 2 -> 1 \(array)")
array = ["a", "b" ,"c", "d"]
array.move(fromOffsets: IndexSet(integer: 1), toOffset: 2)
print("after 1 -> 2 \(array)")
array = ["a", "b" ,"c", "d"]
array.move(fromOffsets: IndexSet(integer: 2), toOffset: 2)
print("after 2 -> 2 \(array)")
Run Code Online (Sandbox Code Playgroud)
结果是:
after 2 -> 1 ["a", "c", "b", "d"]
after 1 -> 2 ["a", "b", "c", "d"]
after 2 -> 2 ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)
我对 1->2 结果感到非常困惑...这怎么不改变数组!它应该与 2->1 相同,不是吗?
请帮助我理解。
我花了一些时间制作 ASCII 艺术图表,所以我们不要浪费这些时间。
从概念上讲,我认为它是:
因此,该算法是:
因此,根据您的用例:
["a", "b", "c", "d"]: moving from index 2 to offset 1: ["a", "c", "b", "d"]
|a|b|c|d| |a|b|c|d|
v ^
| |
+------+
["a", "b", "c", "d"]: moving from index 1 to offset 2: ["a", "b", "c", "d"]
|a|b|c|d| |a|b|c|d|
v ^
| |
+----------+
["a", "b", "c", "d"]: moving from index 2 to offset 2: ["a", "b", "c", "d"]
|a|b|c|d| |a|b|c|d|
v ^
| |
+--------+
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,指定一个将元素与其自身相邻的偏移量不会导致数组发生明显的变化。
我对move操作的理解是:
将指定偏移处的所有元素移动到指定的目标偏移处,并保留顺序。
移动到just before destination,所以你得到的结果是正确的。
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |