デフォルトの関数パラメーター値とオプションを組み合わせる適切な方法はありますか?関数呼び出しでパラメーターが指定されている場合、パラメーターは提供されたデフォルトの値を取りますが、その値は 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!
}
}
この分野の他の言語機能を考えると、よりきちんとした解決策があるはずです。