0
如果我給一個函數參數,一個不是常量的默認值(例如函數調用的結果)就是該值只計算一次(如果是這樣,何時?),或者每次調用該函數時計算它的值?什麼時候評估Swift函數默認參數值?
如果我給一個函數參數,一個不是常量的默認值(例如函數調用的結果)就是該值只計算一次(如果是這樣,何時?),或者每次調用該函數時計算它的值?什麼時候評估Swift函數默認參數值?
用A參數的類型被理解後具有給定表達式的一個默認值等號(=)和表達。給定的表達式在函數被調用時被評估。如果在調用函數時忽略該參數,則使用默認值。
您可以通過將以下在操場證明自己這一點:
import Foundation
func foo(i: UInt32 = arc4random()) {
print(i)
}
foo()
foo()
foo()
foo()
foo()
,它將打印五種不同的隨機數(除非隨機數發生器由一些天文數字不可能生成相同數量的五倍巧合)。
它在上面引用的文檔中沒有明確說明,所以值得注意的是,當您調用函數時指定參數時,不會評估默認表達式。你也可以在一個操場上演示:
func getSomeInt() -> Int {
print("getSomeInt() was called")
return 42
}
func bar(_ i: Int = getSomeInt()) {
print(i)
}
bar(1)
當你運行的時候你會看到「getSomeInt()被調用」不會被打印。
+1對''除非隨機數發生器通過一些天文不可能的巧合產生相同的數字五次:D –
你可能會補充說,默認值表達式只有在參數是* not *提供時纔會被計算,即'foo (1)'不會調用'arc4random'。 –
@MartinR這是一個很好的觀點。我已經添加了一些更詳細的答案。謝謝! –