【问题标题】:Optional Default Parameter in SwiftSwift 中的可选默认参数
【发布时间】:2020-04-05 23:58:12
【问题描述】:

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

【问题讨论】:

  • 您的函数必须检查 nil,如果它是 nil,则应用默认值。 ?? 操作符可以很容易地做到这一点,就像在 let s:String = string ?? ""
  • 另外,默认参数是为了让你在方法调用中保留参数,而不是其他任何东西

标签: ios swift


【解决方案1】:

您必须使用可选字符串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")

【讨论】:

  • OP可以删除函数声明中的-> Void(如果实现不需要参数默认值,则删除= nils)。
  • @AaronBrager 同意-> Void,但我喜欢在无害的情况下镜像 OP 的代码。关于默认参数,我将其视为他问题的主要部分之一。
  • 有道理。 FWIW,我并不是说作为更正,我只是在扩展您的答案。
  • @AaronBrager 别担心! :)
【解决方案2】:

试试这个:

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

【讨论】:

  • 这是一个很好的解决方案,但前提是您想在调用时提供默认参数,而不是函数具有内置默认值。
【解决方案3】:

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

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多