如果两个参数都传递相同的变量,则会出错。 谁能解释为什么我们不能在输入参数函数中传递相同的变量,而我们却可以传递普通函数
func swapTwoInts(a: inout Int, b: inout Int) {
print(a)
print(b)
}
var a = 12
swapTwoInts(a: &a, b: &a)
答案 0 :(得分:1)
在函数内,请勿访问作为输入输出传递的值 参数,即使原始值在当前 范围。访问原始文件是同时访问值, 这违反了Swift的内存独占保证。对于相同的 原因,您不能将相同的值传递给多个输入输出参数。
在您的示例中,您创建了2个相同变量的副本。函数返回时,必须将它们分配给原始参数。这就是这种情况下的冲突。
答案 1 :(得分:0)
因为在这种情况下,inout参数需要2个不同的变量,
为什么因为要交换两个变量并直接返回它们, 因此,两次传递相同的变量将不起作用
因为是inout参数,这意味着函数结束后它将返回带有新值的参数,
传递相同的变量正试图为将不起作用的同一个变量设置2个值,
详细了解inout参数以及它们如何执行here
答案 2 :(得分:0)
将变量“ a”作为两个参数的值传递会产生冲突,因为它试图同时对内存中的同一位置执行两次写访问。
“ 内存访问特征
在冲突的访问环境中要考虑的三个内存访问特征:访问是读还是写,访问的持续时间以及正在访问的内存位置。具体来说,如果您具有两个满足以下所有条件的访问权限,则会发生冲突:
摘录自:Apple Inc.“ Swift编程语言(Swift 5.0)”。苹果书。 https://books.apple.com/in/book/the-swift-programming-language-swift-5-0/id881256329