默认参数 swift
Default parameters swift
对于我的默认参数,我应该写
func myFunc(optionA: Int? = 0)
或
func myFunc(optionA: Int! = 0)
哪个更可取and/or更重要的是哪个在生产中使用得更多?如果我使用 Int!
而不是 Int?
会怎样?我仍然可以传递 Int
、nil
或不传递参数,同时在访问时不必解包参数吗?这样做是否被认为是惰性编程并且可能存在潜在的内存不安全问题?
0 不是零。在任何一种情况下,您都使 optionA
的值为 0
,而不是 nil
.
此处的正确答案取决于您希望您的函数具有什么样的接口。
- 如果您希望调用方能够传递
Int
、nil
或根本不传递任何参数,那么 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)
无法解决的(这应该是你的强烈偏好,除非你有其他充分的理由)。
对于我的默认参数,我应该写
func myFunc(optionA: Int? = 0)
或
func myFunc(optionA: Int! = 0)
哪个更可取and/or更重要的是哪个在生产中使用得更多?如果我使用 Int!
而不是 Int?
会怎样?我仍然可以传递 Int
、nil
或不传递参数,同时在访问时不必解包参数吗?这样做是否被认为是惰性编程并且可能存在潜在的内存不安全问题?
0 不是零。在任何一种情况下,您都使 optionA
的值为 0
,而不是 nil
.
此处的正确答案取决于您希望您的函数具有什么样的接口。
- 如果您希望调用方能够传递
Int
、nil
或根本不传递任何参数,那么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)
无法解决的(这应该是你的强烈偏好,除非你有其他充分的理由)。