2016-07-19 85 views

回答

5

The Swift Programming Language, under Language Reference > Declarations > Special Kinds of Parameters

用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

+1對''除非隨機數發生器通過一些天文不可能的巧合產生相同的數字五次:D –

+1

你可能會補充說,默認值表達式只有在參數是* not *提供時纔會被計算,即'foo (1)'不會調用'arc4random'。 –

+1

@MartinR這是一個很好的觀點。我已經添加了一些更詳細的答案。謝謝! –

相關問題