xcode – 如何在Swift中实现ROT13功能?

前端之家收集整理的这篇文章主要介绍了xcode – 如何在Swift中实现ROT13功能?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想创建一个接收String并返回一个String的函数,并在字母表中用字母后面的字母替换一个字母13个字母(ROT13).我发现了很多例子,遗憾的是由于各种错误,我无法让它工作.例如这一个:

var key = [String:String]() // EDITED
let uppercase = Array(arrayLiteral: "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
let lowercase = Array(arrayLiteral: "abcdefghijklmnopqrstuvwxyz")
for i in 0 ..< 26 {
    key[uppercase[i]] = uppercase[(i + 13) % 26]
    key[lowercase[i]] = lowercase[(i + 13) % 26]
}

func rot13(s: String) -> String {
    return String(map(s,{ key[$0] ?? $0 }))
}

解决方法

实际上你最初的角色映射方法很好:

var key = [Character: Character]()

但是这两个数组必须是字符数组:

let uppercase = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters)
let lowercase = Array("abcdefghijklmnopqrstuvwxyz".characters)

(备注:您(几乎)从不想调用xxxLiteral:初始化程序
明确.这样做(几乎)总是隐藏实际问题.)

现在你填写字典的代码有效:

for i in 0 ..< 26 {
    key[uppercase[i]] = uppercase[(i + 13) % 26]
    key[lowercase[i]] = lowercase[(i + 13) % 26]
}

转换字符串可以完成

//                       map
// String --> Characters ---> Characters -> String

func rot13(s: String) -> String {
    return String(s.characters.map { key[$0] ?? $0 })
}

猜你在找的Xcode相关文章