在Swift中将String转换为音标

时间:2017-01-06 06:30:27

标签: ios string swift3

我想写一个函数将String转换为Phonetic Alphabets

例如: “你好世界”

应打印:

(Hotel Echo Lima利马奥斯卡威士忌奥斯卡罗密欧利马三角洲)。

这是我到目前为止所做的。但是Xcode给了我一个错误

  

使用未解析的标识符reduce

  

使用未解析的标识符连接

任何人都可以帮助我解决这个问题,因为我不熟悉。

func catSomes<A>(xs:[A?]) -> [A] {
    return reduce(xs, []) { acc, x in
        x.map { acc + [$0] } ?? acc
    }
}
let letters =  [
        "A" : "Alpha",  "B" : "Bravo",   "C" : "Charlie",
        "D" : "Delta",  "E" : "Echo",    "F" : "Foxtrot",
        "G" : "Golf",   "H" : "Hotel",   "I" : "India",
        "J" : "Juliett","K" : "Kilo",    "L" : "Lima",
        "M" : "Mike",   "N" : "November","O" : "Oscar",
        "P" : "Papa",   "Q" : "Quebec",  "R" : "Romeo",
        "S" : "Sierra", "T" : "Tango",   "U" : "Uniform",
        "V" : "Victor", "W" : "Whiskey", "X" : "X-ray",
        "Y" : "Yankee", "Z" : "Zulu"]
func nato(str:String) -> String {
    return join(" ", catSomes(map(str) { letters[String($0).uppercaseString] }))
}

2 个答案:

答案 0 :(得分:1)

您可以使用:

func nato(str:String) -> String {
        var newString = ""
        for c in str.characters {
            c == " " ? newString.append("") : newString.append(letters[String(c).uppercased()]! + " ")
        }
        return newString
    }

答案 1 :(得分:0)

要获得预期的输出,这应该足够了

func nato(str:String) -> String {
    return str.characters.map{ letters["\($0)".uppercased()] ?? "" }.joined(separator: " ")
}

我不明白你使用catSomes方法。