【发布时间】:2021-11-18 03:00:35
【问题描述】:
最近 Swift 有一个新的方法叫做 move for Arrays。我们可以使用它来配合 Swiftui 列表拖放列表移动。我的挑战是我不明白它是如何独立工作的,Apple 中的文档对此很少见。这是我在玩这个函数时注意到的一个奇怪的行为。
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)")
结果是:
after 2 -> 1 ["a", "c", "b", "d"]
after 1 -> 2 ["a", "b", "c", "d"]
after 2 -> 2 ["a", "b", "c", "d"]
我对 1->2 结果感到非常困惑……那怎么不改变数组!应该和2->1一样吧?
请帮助我理解。
【问题讨论】:
-
似乎在第一次交换 b 和 c 时按预期工作。第二个将它们交换回来,第三个什么也不做。你在期待什么?
-
查看 workingdgo 的回答。通过使用 0 而不是 1 来证明它对自己是正确的。偏移量最多可以是 4,而不是 3。
-
@loremipsum 我在所有移动操作之前重置为 a b c d ...我预计 1-> 2 和 2->1 是完全相同的最终结果。