qed
qed

Reputation: 23104

Is there a way to convert a variadic function into one that receives an array and vice versa in swift 3?

Code I'm trying:

fileprivate func concatPairs(_ pairStrings: [String]) -> String {
    return "{\n" + pairStrings.joined(separator: ",\n") + "}\n"
}

fileprivate func concatPairs(_ pairStrings: String...) -> String {
    return concatPairs(pairStrings)
}

let p1 = jsonify(pair: ("size", 15), quoteValue: false)
let p2 = jsonify(pair: ("length", 23.12), quoteValue: false)
concatPairs(p1, p2)
concatPairs([p1, p2])

Is there a way to convert a variadic function into one that receives an array and vice versa? I would like to avoid all the extra typing.

Upvotes: 1

Views: 284

Answers (1)

Nirav D
Nirav D

Reputation: 72410

Try using Any as argument type.

fileprivate func concatPairs(_ pairStrings: Any...) -> String {
    if let strings = pairStrings as? [[String]] {
        let newStrings = strings.flatMap { $0 }
        return "{\n" + newStrings.joined(separator: ",\n") + "}\n"
    }
    else if let _ = pairStrings.first as? String {
        return concatPairs(pairStrings)
    }
    return ""    
}

Upvotes: 2

Related Questions