"mutating"函数和Swift中的"inout"参数有区别吗?
Is there any difference between "mutating" function and "inout" parameters in Swift?
根据 Swift 文档,mutating 和 inout 关键字都用于从函数内修改值类型。 "mutating" 和 "inout" 之间有什么区别,以及我们需要使用它们中的任何一个的任何特殊情况。
对我来说,我只在使用它们的地方看到了不同。
标有inout
关键字的参数允许您将您的值传递给类似于参考的任何方法
func square(inout num: Int) {
num = num * num
}
与之相反,用 mutating
关键字标记的方法在类型范围内使用,并允许您从该方法更改值本身
extension Int {
mutating func square() {
self = self * self
}
}
值类型的实例方法不能更改值类型的属性(或值本身),除非它们被标记为 mutating
。
除非这些参数被标记为 inout
.
,否则任何类型的函数都不能更改它们的参数(并且更改会传播到函数外部)
他们做类似的工作,但在不同的环境中。
mutating
标记方法。 inout
标记一个参数。它们是完全不同的东西。
标有 mutating
的方法可以改变 self
即设置 self
的属性,重新分配 self
等
struct Foo {
var foo: Int
mutating func mutate() {
foo += 1 // this is mutating self
}
}
标有inout
的参数基本上成为var
变量,而不是let
常量。您可以更改它们,并且更改也会反映在调用方。
func f(_ x: inout Int) {
x = 10
}
var a = 1
f(&a)
print(a) // 10
inout:- 意思是修改局部变量也会修改传入的参数。没有它,传入的参数将保持相同的值。
mutating:-默认情况下不能在其实例方法中修改值类型的属性。为了修改值类型的属性,您必须在实例方法中使用 mutating 关键字。
根据 Swift 文档,mutating 和 inout 关键字都用于从函数内修改值类型。 "mutating" 和 "inout" 之间有什么区别,以及我们需要使用它们中的任何一个的任何特殊情况。
对我来说,我只在使用它们的地方看到了不同。
标有inout
关键字的参数允许您将您的值传递给类似于参考的任何方法
func square(inout num: Int) {
num = num * num
}
与之相反,用 mutating
关键字标记的方法在类型范围内使用,并允许您从该方法更改值本身
extension Int {
mutating func square() {
self = self * self
}
}
值类型的实例方法不能更改值类型的属性(或值本身),除非它们被标记为 mutating
。
除非这些参数被标记为 inout
.
他们做类似的工作,但在不同的环境中。
mutating
标记方法。 inout
标记一个参数。它们是完全不同的东西。
标有 mutating
的方法可以改变 self
即设置 self
的属性,重新分配 self
等
struct Foo {
var foo: Int
mutating func mutate() {
foo += 1 // this is mutating self
}
}
标有inout
的参数基本上成为var
变量,而不是let
常量。您可以更改它们,并且更改也会反映在调用方。
func f(_ x: inout Int) {
x = 10
}
var a = 1
f(&a)
print(a) // 10
inout:- 意思是修改局部变量也会修改传入的参数。没有它,传入的参数将保持相同的值。
mutating:-默认情况下不能在其实例方法中修改值类型的属性。为了修改值类型的属性,您必须在实例方法中使用 mutating 关键字。