gpt4 book ai didi

parameters - Swift 会自动克隆参数吗?

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:34 25 4
gpt4 key购买 nike

我一直在阅读在 Swift 上发布的 iBook Apple,目前正在阅读有关函数的内容。在本章中,他们讨论了 inout 关键字。这让我想知道:当参数作为参数传递给函数时,swift 会自动克隆参数吗?如果不是,我可以创建一个等于我想传递给函数的变量的常量,然后将常量传递给它以避免在我不想的情况下改变变量吗? ex(顺便说一句,我知道整数是不可变的。我只是使用整数来保持简单。)

var variable: Int = 5
let constant = variable
let returnVale = function(constant)

(抱歉,如果这是一个明显的答案。我的编程经验很少。)感谢您的帮助。

最佳答案

默认情况下,值类型变量不仅按值传递给方法和函数,而且按值作为常量传递。

也就是说,函数不仅不能改变函数外变量的值,甚至不能改变函数内变量的值。

为了让函数修改函数内部的值,函数必须将参数声明为 var 参数。这样做允许函数修改函数内部的变量,但是这仍然不会影响函数外部的变量。

只有指定了inout,函数才能修改函数外的变量。在本例中,我们通过引用传递了变量。

有关此主题的更多阅读,here's a link to the official documentation .如果您向下滚动大约三分之二,您会发现一个名为“常量和可变参数”的部分,紧接着是另一个名为“输入输出参数”的部分。


您不必担心知道函数何时会或不会修改您的变量。这很容易知道。当函数已将参数声明为 inout 参数时,您需要在带有该参数的函数调用中使用“address of”运算符。

这是文档中的示例函数:

func swapTwoInts(inout a: Int, inout b: Int) {
let temporaryA = a
a = b
b = temporaryA
}

现在,给定以下两个 Int:

var someInt = 3
var anotherInt = 107

我们不能这样调用上面的函数:

swapTwoInts(someInt, anotherInt)

编译器会提示:

Passing value of type 'Int' to an inout parameter requires explicit '&'

要解决编译器问题,我们必须使用寻址运算符:

swapTwoInts(&someInt, &anotherInt)

现在编译器很高兴,&,寻址运算符,对我们来说是一个大红旗,表明我们已经通过引用传递变量并且函数可以修改它们的值.

关于parameters - Swift 会自动克隆参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255071/

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