簡體   English   中英

swift inout參數是變量還是指針?

[英]Is swift inout parameter a variable or a pointer?

我覺得在以下代碼中使用swift inout參數有點丟失:

var shouldContinue: Bool = true

func doSomeWork1(shouldContinue: inout Bool)
{
    while shouldContinue
    {
        // ERROR: the compiler wants: doSomeWork2(shouldContinue: &shouldContinue)
        doSomeWork2(shouldContinue: shouldContinue)
    }
}

func doSomeWork2(shouldContinue: inout Bool)
{
    while shouldContinue
    {

    }
}

為什么編譯器需要doSomeWork2(shouldContinue: &shouldContinue)而不是the compiler wants: doSomeWork2(shouldContinue: shouldContinue) 是不是shouldContinue在doSomeWork1()范圍內的指針???

作為指針只是inout參數的優化過程的副作用。 它們實際上使用copy-in copy-out行為以不同的方式工作。 所以內部函數將參數視為常規變量,而不是指針。 如果將它傳遞給另一個帶有inout參數的函數,則必須將其標記為。

輸入輸出參數傳遞如下:

調用該函數時,將復制參數的值。

在函數體中,復制了副本。

函數返回時,副本的值將分配給原始參數。

此行為稱為copy-in copy-out或按值調用結果。 例如,當計算屬性或具有觀察者的屬性作為輸入輸出參數傳遞時,其getter作為函數調用的一部分被調用,其setter作為函數返回的一部分被調用。

作為優化,當參數是存儲在存儲器中的物理地址處的值時,在函數體內部和外部使用相同的存儲器位置。 優化的行為稱為引用調用; 它滿足了拷入式拷貝模型的所有要求,同時消除了復制的開銷。 使用copy-in copy-out給出的模型編寫代碼,而不依賴於按引用調用優化,以便在有或沒有優化的情況下它的行為正確。

進出參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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