如果条件在swift函数中用于可选参数

时间:2016-06-23 14:51:12

标签: swift function optional-parameters

我有一个函数:myFunction(param1:class?,param2:class?,param3:Int,...),其中2个第一个参数是可选的,它们的类型是自定义类。 但有时候,我需要输入这些参数的类并不存在,这就是为什么这些参数是可选的。而我无法提出“无所事事”。作为价值。

所以我想做这样的事情:

if (param1 !=nil && param2 != nil) {
   myFunction(param1: myClass, param2: myClass, param3: 2, ...)
}
else if (param1 ==nil && param2 == nil) {
   myFunction(param3: 2, ...)
}
else if (param1 !=nil && param2 == nil) {
   myFunction(param1: myClass, param3: 2, ...)
}
else if (param1 ==nil && param2 != nil) {
   myFunction(param2: myClass, param3: Int, ...)
}

...

问题是,在我的函数中我有更多可选参数,所以如果我需要一个" if"所有选项的条件,都无法管理。

那么有没有办法在函数参数中加入if条件?示例:

myFunction(myClass==nil ? <nothing>:param1: myClass, myClass==nil ? <nothing>:param2: myClass, param3: 2, ...)

非常感谢您的帮助:)

此致

2 个答案:

答案 0 :(得分:0)

您不清楚在函数中使用类作为参数。您应该根据用途重新构建它们。如果你想使用这个函数,初始2参数作为可选项,那么你可以做这样的事情。

if let param1 = param1 {
    if let param2 = param2 {
        myFunction(param1: myClass, param2: myClass, param3: 2, ...)
    }else{
        myFunction(param1: myClass, param3: 2, ...)
    }
}else if let param2 = param2 {
    myFunction(param2: myClass, param3: Int, ...)
}else{
   myFunction(param3: 2, ...)
}

答案 1 :(得分:0)

你设计的函数是为了让一些参数成为可选参数,而不是在你调用函数时你不应该关心解包,你只需要在函数中使用guard或者let来处理这个可选参数。

func myFunction(param1: AnyObject?, param2: AnyObject?, param: AnyObject) {

   guard let firstParam = param1, secondParam = param2 else { return}

   // here use your unwrapped params

}