当传入的值为nil时,函数参数的默认值是什么?

3

有没有一种简洁的方法来结合默认函数参数值和可选项,使得当在函数调用中指定了参数,但其值为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!
    }
}

感觉应该有更简洁的解决方案,考虑到这个领域中的其他语言特性。

1个回答

15

如何呢:

class MyObj {

    var foobar:String

    init(foo: String?=nil) {
        self.foobar = foo ?? "hello"
    }
}

1
在苹果的Swift iBook中,名为“Nil Coalescing Operator”的部分提供了关于??是什么以及它如何在内部工作的很好的解释。 - Andrew Ebling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接