Swift的方法是支持默认参数的,也就是说在声明方法时,可以给某个参数指定一个默认使用的值。在调用该方法时要是传入了这个参数,则使用传入的值,如果缺少这个输入参数,那么就直接使用设定的默认值进行调用。可以说这是Objective-C社区的开发者们盼了好多年的一个特性了,Objective-C由于语法的特点几乎无法在不大幅改动的情况下很好地实现默认参数。
和其他很多语言的默认参数相比较,Swift中的默认参数限制更少,并没有所谓“默认参数之后不能再出现无默认值的参数”这样的规则,举个例子,下面两种方法的声明在Swift里都是合法可用的:
其他不少语言只能使用后面一种写法,将默认参数作为方法的最后一个参数。
在调用的时候,如果想要使用默认值,只要不传入相应的值就可以了。下面这样的调用将得到同样的结果:
这两个调用都省略了带有默认值的参数,sayHello1中str1是默认的“Hello”,而sayHello2中的str3是默认的“World”。
另外,喜欢按着Cmd键用鼠标点来点去到处看的朋友可能会注意到,NSLocalizedString这个常用方法的签名现在是:
默认参数写的是default,这是含有默认参数的方法所生成的Swift的调用接口。当我们指定一个编译时就能确定的常量来作为默认参数的取值时,这个取值是隐藏在方法实现内部的,不应该暴露给其他部分。与NSLocalizedString很相似的还有Swift中的各类断言: