Reputation: 23104
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
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