说我有一个定义的函数
someInitialiser(paramA : String = "defaultA", paramB : Int = 23, paramC : Double = 99.99) {
//initialisation using parameters
}
我不希望函数中的值是可选的,因此在没有参数的情况下使用默认值。
但是,当我想调用该函数时,我有一堆值确实是可选的。
据我所知,您不能将nil值传递给该函数,并且由于该函数不接受可选输入,因此无法使用默认值。
因此,在我看来,唯一的方法是
if paramA == nil && paramB == nil && paramC == nil { someInitialiser() }
if paramA == nil && paramB == nil && paramC != nil { someInitialiser(paramC: paramC) }
if paramA == nil && paramB != nil && paramC == nil { someInitialiser(paramB: paramB) }
if paramA == nil && paramB != nil && paramC != nil { someInitialiser(paramB: paramB, paramC: paramC) }
if paramA != nil && paramB == nil && paramC == nil { someInitialiser(paramA: paramA) }
...
对于具有更多参数的函数,最多有2 ^(参数数量)个可能的函数调用,因此显然不太好写。
能够做类似的事情会容易得多
someInitialiser(paramA: paramA ?? NULL, paramB: paramB ?? NULL, paramC: paramC ?? NULL)
因此,如果值是nil,它将根本不向函数传递任何参数,因此它依赖于定义中的默认值。
我知道一种替代方法是在调用函数时也提供默认值,使用与上面类似的合并,尽管不必在定义之外重复它们也很不错。
有什么想法吗?
创建两个功能: