我在swift中有一个带默认参数的函数
func test(string: String = "", middleString: String = "", endString: String = "") -> Void {
// do stuff
}
我想传入可选字符串
的变量let string: String? //
let middleString: String?
let endString: String?
如何使参数为nil,使用默认参数。如果没有,则使用选项
中的值 test(string, middleString: middleString, endString: endString)
答案 0 :(得分:51)
您必须使用可选字符串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")
答案 1 :(得分:1)
试试这个:
test(string: string ?? "", middleString: middleString ?? "", endString: endString ?? "")
答案 2 :(得分:1)
Swift 3
我是这样写的:test(string: String? = "", middleString: String? = "", endString: String? = "") {
}
这样你可以使用或不使用参数调用 test(),如果没有提供参数,则获取默认值
答案 3 :(得分:0)
注意:不要将此可选参数解释为?
,这是不同的方法。
完全可选参数,即在调用方法时甚至不使用。
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)