[swift 進階]讀書筆記-第六章:函式 C6P4 inout引數和可變方法

liaoWorking在掘金發表於2019-01-16

第六章:函式(function)

6.4 inout引數和可變方法(inout parameter and mutating function)

知識點: inout 關鍵字:就是改變傳遞給函式的引數,讓引數變得可變(swift 中方法的引數預設都是 let 不可變的)

inout做的事情就是把一個值傳遞給函式,函式可以改變這個值,然後將原來的值替換,並傳遞出來。 並不是傳遞引用

什麼樣的表示式可以當作inout引數去傳遞?

先來弄懂兩個c++中的概率。 lvalve (變數)和 rvalve (不是變數) 如array[2] = 4 lvalue = rvalue

  • lvalue估計來源於left value。 位置處於左邊。就是可以修改的值。
  • rvalue估計來源於right value。處於賦值語句右邊,是隻讀的不可修改的值。 資料來源:關於lvalve 和 rvalve 感興趣的同學可以看看。 inout引數,只能傳遞lvalve給它。因為不可能對一個rvalve進行改變。
注: 每個lvalve前面需要加上&符號將它傳入(swift中的自動補全會幫我們加上& ?)

[圖片上傳失敗...(image-6ded17-1547615689035)]

inout的基本使用

知識點:只讀屬性(只有get方法)無法作用於inout引數

tips:swift文件指出 我們不應該依賴inout這個行為

巢狀函式和inout


可以在巢狀函式中使用一個inout引數

[圖片上傳失敗...(image-949a35-1547615689035)]

注: 我們不能讓這裡的inout引數逃逸@escaping (原因:inout的值會在函式返回之前賦值回去,逃逸會增加inout引數的生命週期,如果延時返回回去賦值,原來的值不存在了,就妥妥的不安全啊~)

@escaping 的用法後面會講。 你急的話可以先自己百度。預設大家都很優秀,知道是什麼用法~

&不意味inout的情況


&除了講變數傳遞給inout, 還可以將變數轉化為不安全的指標

[圖片上傳失敗...(image-6cae5-1547615689035)]

這裡的&使用就不是inout語義了,是將可憐的變數轉化成了不安全的指標。

文章原始檔地址

相關文章