Swift中的可选默认参数

我在swift中有一个带默认参数的函数

func test(string: String = "", middleString: String = "", endString: String = "") -> Void { // do stuff } 

我想传入将成为可选字符串的变量

 let string: String? // let middleString: String? let endString: String? 

如何使参数为零,使用默认参数。 如果没有,则使用选项中的值

test(string, middleString: middleString, endString: endString)

你必须使用Optional strings String? 作为参数类型,默认值为nil 。 然后,当您调用函数时,您可以提供字符串或将该参数保留。

 func test(string: String? = nil, middleString: String? = nil, endString: String? = nil) -> Void { let s = string ?? "" let mS = middleString ?? "" let eS = endString ?? "" // do stuff with s, mS, and eS, which are all guaranteed to be Strings } 

在函数内部,您必须检查每个参数是否为nil ,并在那里替换为默认值。 使用?? 运算符使这很容易。

然后,您可以通过提供所有参数,无参数或仅包含要包含的参数来调用函数:

 test(string: "foo", middleString: "bar", endString: "baz") test() test(string: "hello", endString: "world") 

尝试这个:

  test(string: string ?? "", middleString: middleString ?? "", endString: endString ?? "") 

斯威夫特3

我这样写的:

 test(string: String? = "", middleString: String? = "", endString: String? = "") { } 

这样你可以使用或不使用参数调用test() ,如果没有提供参数,则获取默认值

注意:不要将此可选参数解释为? ,这是不同的方法。

完全可选参数,即在调用方法时甚至不使用。

 func doAddition(value1Name value1:Int = 0, value2Name value2:Int = 0, value3Name value3:Int = 0){ print(value1+value2+value3) } 

现在所有参数都是可选的添加。 打电话给你喜欢的,

 doAddition(value1Name: 1) doAddition(value1Name: 1, value2Name: 2) doAddition(value3Name: 3)