初学者Swift:如果字典中的字母转换字符串

时间:2017-04-29 10:41:30

标签: swift string function dictionary

感谢您的帮助 - 刚刚开始,想象一下我的逻辑存在一些严重问题。

尝试编写程序,给定输入,如果在字典中找到该输入的字母,则用相应的值替换该字母。

真的卡在我出错的地方。任何人都能够帮助/建议可能有效的替代逻辑吗?

var leetDic = ["A" : "4",
               "B" : "6",
               "E" : "3",
               "I" : "1",
               "L" : "1",
               "M" : "(V)",
               "N" : "(/)",
               "O" : "0",
               "S" : "5",
               "T" : "7",
               "V" : "(/",
               "W" : "`//]"]


func leetConverter(leet: String) {

    var leet1 = leet.uppercased()

    for i in leet1.characters { 

        if i == leetDic.keys { //ERROR "Binary operator cannot be applied to operands of type Character and dictionary"

            i = leetDic.values // ERROR "cannot assign value 'i' is a let constant"
        } else {

            return i
        }
    }


}

var test = leetConverter(leet: "Hello World")

1 个答案:

答案 0 :(得分:0)

问题是你在比较字符和数组也可以在循环中为i赋值,因为它是常量你可以这样。

func leetConverter(leet: String) -> String {
    var leet1 = leet.uppercased()
    var newString = String()
    for ch in leet1.characters {
        let str = String(ch)
        if let value = leetDic[str] {
            newString.append(value)
        } else {
            newString.append(str)
        }
    }
    return newString
}

更多Swifty方式

func leetConverter(leet: String) -> String {
    let str = leet.characters.map { leetDic[String($0).uppercased()] ?? String($0) }.joined()
    return str
}