onevcat / OneV-s-Den-Comments

0 stars 0 forks source link

2014/06/walk-in-swift/ #21

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

行走于 Swift 的世界中 | OneV's Den

2014 年 7 月 13 日更新:根据 beta 3 的情况修正了文中过时的部分

https://onevcat.com/2014/06/walk-in-swift/

luhui1669 commented 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

onevcat commented 2 years ago

是的。Swift beta 3 之后,这一块的内存模型和 WWDC 14 开会期间相比已经完全不同了。关于这一点在本文《真 参照和值,Array和Dictionary背后的一些故事》部分也已经补充了。现在 ArraySlice 也具有写时复制,整个集合类型的行为都统一到值类型了。