默认参数 swift

Default parameters swift

对于我的默认参数,我应该写

func myFunc(optionA: Int? = 0)

func myFunc(optionA: Int! = 0)

哪个更可取and/or更重要的是哪个在生产中使用得更多?如果我使用 Int! 而不是 Int? 会怎样?我仍然可以传递 Intnil 或不传递参数,同时在访问时不必解包参数吗?这样做是否被认为是惰性编程并且可能存在潜在的内存不安全问题?

0 不是零。在任何一种情况下,您都使 optionA 的值为 0,而不是 nil.

此处的正确答案取决于您希望您的函数具有什么样的接口。

  • 如果您希望调用方能够传递 Intnil 或根本不传递任何参数,那么 optionA 应该是 Int? 类型。
  • 如果您希望调用者能够传递 Int,根本没有参数,但不是 nil,那么 optionA 应该是 Int 类型。

if I do not supply a value or nil is supplied for the parameter its default value becomes 0.

这是一个非常奇怪的要求,很可能表明存在设计错误。但是,实现起来很简单。

func myFunc(optionA: Int? = nil) {
    let a = optionA ?? 0
    // ...continue to use a...
}

也就是说,这几乎可以肯定是坏掉的 API。举一个更具体的例子来说明你正在解决的问题是 func myFunc(a: Int) 无法解决的(这应该是你的强烈偏好,除非你有其他充分的理由)。