如何在Swift中将variadic(省略号)参数指定为可选参数?

Shi*_*zam 10 variadic-functions optional-parameters ios swift

在Swift中可以选择变量参数吗?我尝试了两种有意义的方法,但都没有编译:

func myFunc(queryFormat: String?...) {

}
Run Code Online (Sandbox Code Playgroud)

要么

func myFunc(queryFormat: String...?) {

}
Run Code Online (Sandbox Code Playgroud)

注意:第一个实现在技术上编译,但如果您尝试打开它:

if let queryFormatUnwrapped = queryFormat {
...
}
Run Code Online (Sandbox Code Playgroud)

你得到一个错误Bound value in a conditional binding must be of Optional Type,它向我表明它将它视为一个可选字符串数组而不是一个可选的字符串数组(这有点愚蠢).

Tob*_*ias 15

不可能有一个可选的variadic参数.该函数将始终接收可变参数的数组.

但是,数组可以为空,或者数组中的值可以为nil.

我把一些示例代码放在一起,希望它能帮助传达我想说的内容.

func vardicPrint(strings: String...) {
    if strings.isEmpty {
        print("EMPTY")
    } else {
        for string in strings {
            print(string)
        }
    }
}

func optionalPrint(maybeStrings: String?...) {
    if maybeStrings.isEmpty {
        print("EMPTY")
    } else {
        for string in maybeStrings {
            if let string = string {
                print(string)
            } else {
                print("nil")
            }

        }
    }
}

vardicPrint("Hello", "World", "!")
vardicPrint()


var nilString: String?
optionalPrint("Goodbye", nilString, "World", "!")

/* OUTPUT:
Hello
World
!
EMPTY

Goodbye
nil
World
!
*/
Run Code Online (Sandbox Code Playgroud)