有没有一种巧妙的方法来组合默认函数参数值和可选参数,所以当在函数调用中指定参数时,参数采用提供的默认值,但它的值是 nil?
例如:
class MyObj {
var foobar:String
init(foo: String?="hello") {
self.foobar = foo!
}
}
let myObj = MyObj() // standard use of default values - don't supply a value at all
println(myObj.foobar) // prints "hello" as expected when parameter value is not supplied
var jimbob: String? // defaults to nil
...
// supply a value, but it is nil
let myObj2 = MyObj(foo: jimbob) // <<< this crashes with EXC_BAD_INSTRUCTION due to forced unwrap of nil value
println(myObj2.foobar)
...或者是为成员常量/变量提供默认值的最佳选择,然后仅在向构造函数提供值时才更改它们,如下所示:
let foobar:String = "hello"
init(foo: String?) {
if foo != nil {
self.foobar = foo!
}
}
考虑到该领域的其他语言功能,感觉应该有一个更简洁的解决方案。