Open utterances-bot opened 2 years ago
var arr : Array = [0,0,0] var slice = arr[0...1]
arr[0] = 1 arr //[1, 0, 0] slice //[1, 0]
slice[1] = 2 arr //[1, 2, 0] slice //[1, 2]
最新的编译器执行后的结果 [1, 0, 0] [0, 0]
[1, 0, 0] [0, 2] slice的更新应该不会影响 arr
是的。Swift beta 3 之后,这一块的内存模型和 WWDC 14 开会期间相比已经完全不同了。关于这一点在本文《真 参照和值,Array和Dictionary背后的一些故事》部分也已经补充了。现在 ArraySlice 也具有写时复制,整个集合类型的行为都统一到值类型了。
行走于 Swift 的世界中 | OneV's Den
2014 年 7 月 13 日更新:根据 beta 3 的情况修正了文中过时的部分
https://onevcat.com/2014/06/walk-in-swift/