2016-12-15 13 views
1

代码我想:有没有办法将一个可变参数转换为一个接收数组,反之亦然在swift 3中?

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]) 

有没有办法到variadic function转换成一个接收一个数组,反之亦然?我想避免所有额外的输入。

回答

2

尝试使用Any作为参数类型。

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 ""  
} 
+0

不错的破解,但如果你传递两个或更多的数组,结果将是令人惊讶的。所以这种语言似乎并没有很好的支持这种东西。 – qed

+0

@qed这是正确的,但是你的要求不是这样,你想为你添加的两个函数的解决方案,并没有包含两个参数作为字符串数组。 –

+0

我知道,只是签名表明它可能需要多个阵列,有点误导。对于我的用例应该没问题,因为我知道这个怪癖。 – qed

相关问题