[英]Is there any difference between “mutating” function and “inout” parameters in Swift?
根據Swift文檔,mutating和inout關鍵字都用於修改函數中的值類型。 “mutating”和“inout”之間是否有任何區別,以及我們需要使用其中任何一個的特殊情況。
mutating
標志着一種方法。 inout
標記一個參數。 它們是完全不同的東西。
標注方法mutating
可能變異self
IE設置的特性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
關鍵字標記的參數允許您將值傳遞給任何類似於引用的方法
func square(inout num: Int) {
num = num * num
}
與之相反,使用mutating
關鍵字標記的方法在類型范圍中使用,並允許您從此方法更改值本身
extension Int {
mutating func square() {
self = self * self
}
}
值類型的實例方法不能更改值類型的屬性(或值本身),除非它們被標記為mutating
。
任何類型的函數都不能更改其參數(並且更改會在函數外部傳播),除非這些參數標記為inout
。
他們做了類似的工作,但在不同的環境中。
inout: - 這意味着修改局部變量也會修改傳入的參數。 沒有它,傳入的參數將保持相同的值。
mutating: - 默認情況下,不能在其實例方法中修改值類型的屬性。 要修改值類型的屬性,必須在實例方法中使用mutating關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.