2016-12-15 36 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

相關問題