2016-05-13 49 views
1

我學習斯威夫特,我不明白爲什麼這個代碼打印出來冗餘輸出:消氣意外呼籲INOUT參數的第二時間

class A {} 
var x: A { 
    set { print("set") } 
    get { 
     print("get") 
     return A() 
    } 
} 
func f(inout y: A) { print("f") } 
f(&x) 

結果是:

get 
f 
set 
get 

爲什麼最後到達這裏? 如果我再添INOUT參數F:

class A {} 
var x: A { 
    set { print("set") } 
    get { 
     print("get") 
     return A() 
    } 
} 
func f(inout y: A, inout z: Int) { print("f") } 
var z = 10 
f(&x, z:&z) 

新的結果是:

get 
f 
set 

你能清楚我嗎?

回答

0

我猜你是在操場上寫這段代碼!?

如果你把它放到一個普通的項目中並在模擬器上運行它,你將看不到這種行爲。
它只發生在操場

在設備這兩種方法打印預期

得到
˚F
設置


說明:

操場執行看起來是這樣的:

enter image description here

請注意A在最後一行打印在右側?遊樂場試圖顯示x的值,並且爲了顯示它,它訪問它的獲取者!如果您有多個參數,則Xcode不會嘗試打印任何內容 - >添加第二個參數會導致Xcode不會get任何值。

+0

我沒有添加inout參數。結果與第一個相同。如果我添加一個inout參數。結果會有所不同。無論如何,謝謝你的觀點。我認爲你是對的。我會驗證這一點。 – aviit

+0

@aviit你是什麼意思? – luk2302

+0

我的意思是我剛剛開始使用Swift在遊樂場:)。我還沒有學會在別人的代碼。謝謝! – aviit