如何仅在参数不为零的情况下方便地传递参数?

问题描述 投票:0回答:1

说我有一个定义的函数

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,它将根本不向函数传递任何参数,因此它依赖于定义中的默认值。

我知道一种替代方法是在调用函数时也提供默认值,使用与上面类似的合并,尽管不必在定义之外重复它们也很不错。

有什么想法吗?

swift optional optional-parameters optional-arguments
1个回答
0
投票

创建两个功能:

© www.soinside.com 2019 - 2024. All rights reserved.