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

相关问题