簡體   English   中英

Swift中的“mutating”函數和“inout”參數之間有什么區別嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM