加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

参数 – Swift自动克隆参数吗?

发布时间:2020-12-14 04:34:53 所属栏目:百科 来源:网络整理
导读:我一直在阅读在 Swift上发布的iBook Apple,我目前正在阅读有关功能的内容.在本章中,他们讨论了inout关键字.这让我想知道:当swift作为参数传递给函数时,swift会自动克隆参数吗?如果没有,我可以创建一个等于我想要传递给函数的变量的常量,然后传递给常量,以
我一直在阅读在 Swift上发布的iBook Apple,我目前正在阅读有关功能的内容.在本章中,他们讨论了inout关键字.这让我想知道:当swift作为参数传递给函数时,swift会自动克隆参数吗?如果没有,我可以创建一个等于我想要传递给函数的变量的常量,然后传递给常量,以避免变量如果我不想变量? ex(顺便说一句,我知道整数是不可变的.我只是使用整数来保持简单.)

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

(对不起,如果这是一个明显的答案.我的编程经验很少.)感谢您的帮助.

解决方法

默认情况下,值类型变量不仅通过值传递给方法和函数,而且通过值传递给常量.

也就是说,函数不仅不能改变函数外的变量值,它甚至不能改变INSIDE函数的变量值.

为了使函数能够修改函数内部的值,函数必须将参数声明为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
}

现在,给出以下两个Ints:

var someInt = 3
var anotherInt = 107

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

swapTwoInts(someInt,anotherInt)

编译器会抱怨:

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

要修复编译器投诉,我们必须使用address-of运算符:

swapTwoInts(&someInt,&anotherInt)

现在编译器很高兴,而且&,address-of运算符,对我们来说是一个大红旗,我们通过引用传递了变量,函数可以修改它们的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读