Swift中的可选默认参数

时间:2015-07-08 19:22:47

标签: ios swift

我在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)

4 个答案:

答案 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)