Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在swift中,每N个字符添加一个随机字母数字_Swift - Fatal编程技术网

在swift中,每N个字符添加一个随机字母数字

在swift中,每N个字符添加一个随机字母数字,swift,Swift,我正试图通过在每三个字符后向字符串添加一个随机字母数字字符来进行简单的加密。在Stackoverflow的帮助下,我可以添加相同的字符,但不是随机添加的 var code = "1234567890" func randomAlphanumeric() -> String { let alphanumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

我正试图通过在每三个字符后向字符串添加一个随机字母数字字符来进行简单的加密。在Stackoverflow的帮助下,我可以添加相同的字符,但不是随机添加的

var code = "1234567890"

func randomAlphanumeric() -> String {
let alphanumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    return String((0..<1).map{ _ in alphanumeric.randomElement()! })
}

func encrypt(_ code: String, by separator: String = randomAlphanumeric(), stride: Int = 3) -> String {
    return code.enumerated().map { $0.isMultiple(of: stride) && ($0 != 0) ? "\(separator)\($1)" : String($1) }.joined()
    }

encrypt(code)
var code=“1234567890”
func random字母数字()->字符串{
let alphanumeric=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”
返回字符串(字母数字.randomElement()!)
}
func encrypt(uu代码:String,步长:Int=3)->String{
//数组,以便我们可以向其中插入新元素。
//当我们完成后,我们可以将一切重新连接在一起
var codeArray=code.map{String($0)}
//将添加到代码中的额外字符串的计数。
让extraStringsCount=code.count/步幅
//将额外的字符串添加到数组中

(0..您可以在字符串迭代器上使用
reduce
来形成字符串

func encrypt(_ code: String, stride: Int = 3) -> String {
    guard code.count > stride else { return code }

    return code.enumerated().reduce(into: "") {
        $0.append($1.element)
        if ($1.offset + 1) % stride == 0 { $0 += randomAlphanumeric() }
    }
}
这是一个变体,它使用相同的字符选择,但将它们随机排列到本地保存的数组中。不同之处在于,任何字符在加密过程中都不会被多次使用

func encrypt(_ code: String, stride: Int = 3) -> String {
    guard code.count > stride else { return code }

    var random: [Character] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".shuffled()

    return code.enumerated().reduce(into: "") {
        $0.append($1.element)
        if ($1.offset + 1) % stride == 0 { $0.append(random.popLast() ?? Character("")) }
    }
}

当然,因为您只调用一次randomAlphanumeric()。您需要每四个字符调用一次。是的,我知道。这就是为什么我也尝试使用for循环,但不幸的是没有成功,因为数组每次迭代都会变大。如果您知道,问题是什么?如何调用randomAlphanumeric()每四个字符一个。我编辑这个问题是为了让它更清晰。谢谢,效果也很好。只是有一(几个)级别对我来说太高了,所以很难编辑
func encrypt(_ code: String, stride: Int = 3) -> String {
    guard code.count > stride else { return code }

    return code.enumerated().reduce(into: "") {
        $0.append($1.element)
        if ($1.offset + 1) % stride == 0 { $0 += randomAlphanumeric() }
    }
}
func encrypt(_ code: String, stride: Int = 3) -> String {
    guard code.count > stride else { return code }

    var random: [Character] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".shuffled()

    return code.enumerated().reduce(into: "") {
        $0.append($1.element)
        if ($1.offset + 1) % stride == 0 { $0.append(random.popLast() ?? Character("")) }
    }
}