gpt4 book ai didi

swift - Swift 结构和数组的定义冲突

转载 作者:IT王子 更新时间:2023-10-29 05:36:17 24 4
gpt4 key购买 nike

在 Swift 编程语言中,它说:

  1. “Swift 中的所有基本类型——整数、 float 、 bool 值、字符串、数组和字典——都是值类型,并且是作为幕后结构实现。”

  2. 结构实例始终按值传递,而类实例始终按引用传递”

  3. “如果您将 Array 实例分配给常量或变量,或将 Array 实例作为参数传递给函数或方法调用,则数组的内容不会被复制分配或调用发生的时间点。相反,两个数组共享相同的元素值序列。当您通过一个数组修改元素值时,结果可以通过另一个数组观察到。”

很明显,Swift 在数组方面自相矛盾。数组是值类型还是引用类型?

最佳答案

数组是特例。它们是具有特殊行为的值类型。

在您找到第 3) 点的页面上,有足够的信息可以理解原因:

The assignment and copy behavior for Swift’s Array type is more complex than for its Dictionary type. Array provides C-like performance when you work with an array’s contents and copies an array’s contents only when copying is necessary

并且,在你声明之后:

Instead, both arrays share the same sequence of element values. When you modify an element value through one array, the result is observable through the other.

For arrays, copying only takes place when you perform an action that has the potential to modify the length of the array.

因此,阅读这些要点我们了解到:

  • 数组是结构体,但具有特殊的行为,主要原因是为了保持类 C 的性能。
  • 只有当复制的数组长度改变时才进行复制

最后一件事:记住,复制数组时,只会复制值类型(结构、枚举、原始类型)。不复制对象,只复制它们的引用(指针)

关于swift - Swift 结构和数组的定义冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com