Swift:可选的无用默认值?
Swift : Useless default value for Optional?
我正在创建这样的函数:
func foo(bar: UInt? = 0) {
let doSomething = someOtherFunc(bar!)
}
如果我向 foo()
传递一个 nil
值,我希望在解包时使用默认值 0,但我得到的不是常见错误 unexpectedly found nil while unwrapping an Optional value
我哪里错了?
您正在将 nil
传递给函数,但在函数内部您强制使用 !
展开值,因此它崩溃了。
您应该使用 if let x = y {
(或任何其他相关技术)来防止这种情况:
func foo(bar: UInt? = 0) {
if let input = bar {
someOtherFunc(input)
}
}
func someOtherFunc(bar: UInt) {
println(bar)
}
foo(bar: 42) // Prints "42"
foo(bar: nil) // Does nothing
仅当您不提供参数时才使用默认值= 0
对于可选参数:
func foo(bar: UInt? = 0) {
println(bar)
}
foo(bar: nil) // nil
foo(bar: 1) // Optional(1)
foo() // Optional(0), default value used
如果您打算用 0
替换传递的 nil
值
然后你可以使用 nil-coalescing 运算符 ??
:
func foo(bar: UInt?) {
println(bar ?? 0)
}
foo(nil) // 0
foo(1) // 1
默认值不适用于传入 nil
的情况。默认值适用于调用方未提供值的情况——也就是说,如果您将函数调用为 foo()
.
如果您希望在用户传入 nil
时应用默认值,您应该使用 nil-coalescing 运算符,??
:
func foo(bar: UInt?) {
// bar replaced with 0 when it is nil, else it's unwrapped
let doSomething = someOtherFunc(bar ?? 0)
}
我正在创建这样的函数:
func foo(bar: UInt? = 0) {
let doSomething = someOtherFunc(bar!)
}
如果我向 foo()
传递一个 nil
值,我希望在解包时使用默认值 0,但我得到的不是常见错误 unexpectedly found nil while unwrapping an Optional value
我哪里错了?
您正在将 nil
传递给函数,但在函数内部您强制使用 !
展开值,因此它崩溃了。
您应该使用 if let x = y {
(或任何其他相关技术)来防止这种情况:
func foo(bar: UInt? = 0) {
if let input = bar {
someOtherFunc(input)
}
}
func someOtherFunc(bar: UInt) {
println(bar)
}
foo(bar: 42) // Prints "42"
foo(bar: nil) // Does nothing
仅当您不提供参数时才使用默认值= 0
对于可选参数:
func foo(bar: UInt? = 0) {
println(bar)
}
foo(bar: nil) // nil
foo(bar: 1) // Optional(1)
foo() // Optional(0), default value used
如果您打算用 0
替换传递的 nil
值
然后你可以使用 nil-coalescing 运算符 ??
:
func foo(bar: UInt?) {
println(bar ?? 0)
}
foo(nil) // 0
foo(1) // 1
默认值不适用于传入 nil
的情况。默认值适用于调用方未提供值的情况——也就是说,如果您将函数调用为 foo()
.
如果您希望在用户传入 nil
时应用默认值,您应该使用 nil-coalescing 运算符,??
:
func foo(bar: UInt?) {
// bar replaced with 0 when it is nil, else it's unwrapped
let doSomething = someOtherFunc(bar ?? 0)
}