通过引用传递常量参数
Pass constant parameter by reference
如何通过引用传递常量参数?
在 Swift 中,它可以只对变量完成(并使用 inout
关键字)。
我可以通过引用传递常量吗?
我想做这样的事情:
let x = ["a":1, "b":2]
myFunc(&x)
您不能将 let
常量传递给 inout
参数。
In-out parameters are passed as follows:
- When the function is called, the value of the argument is copied.
- In the body of the function, the copy is modified.
- When the function returns, the copy’s value is assigned to the original argument.
这会自动取消 let
常量的资格,因为它们无法重新赋值。
Can I pass a constant by reference?
我不知道。但是,您 永远 不需要自己这样做。
在您使用 Dictionary
提出的特定情况下,您处理的是一个 间接 存储其内容的集合。在最简单的层面上,您可以将其视为只有一个 属性 的结构,它只是对字典的键和值的实际存储的引用。
按值传递该结构(字典)等同于仅传递一个引用。多个字典可以通过该引用查看相同的键值存储。但是,如有必要,将采用存储的唯一副本进行突变——这称为写时复制,并允许值语义,而无需在每次复制字典结构时复制整个缓冲区的开销。
因此,完全没有必要在这里传递引用。只需正常传递字典(即按值 - 也就是说,不使用 &
,例如 inout
和指针参数)。
在更一般的情况下,您希望在按值传递给函数时避免复制大型结构 – 编译器已经涵盖了您。它可以执行各种巧妙的优化以减少复制;其中之一是通过引用函数传递结构。我将对此进行更详细的介绍 。
这真的不是你应该考虑的事情,除非:
您实际上需要调用方突变(在这种情况下,无论如何您都需要 var
)。
您明确指出了一个性能瓶颈(在这种情况下,您可能会受益于制作自己的写时复制结构)。
如何通过引用传递常量参数?
在 Swift 中,它可以只对变量完成(并使用 inout
关键字)。
我可以通过引用传递常量吗?
我想做这样的事情:
let x = ["a":1, "b":2]
myFunc(&x)
您不能将 let
常量传递给 inout
参数。
In-out parameters are passed as follows:
- When the function is called, the value of the argument is copied.
- In the body of the function, the copy is modified.
- When the function returns, the copy’s value is assigned to the original argument.
这会自动取消 let
常量的资格,因为它们无法重新赋值。
Can I pass a constant by reference?
我不知道。但是,您 永远 不需要自己这样做。
在您使用 Dictionary
提出的特定情况下,您处理的是一个 间接 存储其内容的集合。在最简单的层面上,您可以将其视为只有一个 属性 的结构,它只是对字典的键和值的实际存储的引用。
按值传递该结构(字典)等同于仅传递一个引用。多个字典可以通过该引用查看相同的键值存储。但是,如有必要,将采用存储的唯一副本进行突变——这称为写时复制,并允许值语义,而无需在每次复制字典结构时复制整个缓冲区的开销。
因此,完全没有必要在这里传递引用。只需正常传递字典(即按值 - 也就是说,不使用 &
,例如 inout
和指针参数)。
在更一般的情况下,您希望在按值传递给函数时避免复制大型结构 – 编译器已经涵盖了您。它可以执行各种巧妙的优化以减少复制;其中之一是通过引用函数传递结构。我将对此进行更详细的介绍
这真的不是你应该考虑的事情,除非:
您实际上需要调用方突变(在这种情况下,无论如何您都需要
var
)。您明确指出了一个性能瓶颈(在这种情况下,您可能会受益于制作自己的写时复制结构)。