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这是一个很好的观点。我已经添加了一些更详细的答案。谢谢! –