我想写一个函数将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] }))
}
答案 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
方法。