【问题标题】:Strange return value after generating random string (Swift 3)生成随机字符串后的奇怪返回值(Swift 3)
【发布时间】:2016-09-19 05:41:03
【问题描述】:

我创建了一个方法,它生成并返回一个由字母和数字组成的随机字符串,但由于某种原因,我只得到一个带数字的字符串,而且字符串的长度与我要求的不接近是。已返回的字符串示例:“478388299949939566”(插入 18 作为长度)、“3772919388584334”(插入 9 作为长度)、“2293010089409293945”(插入 6 作为长度)。任何人都可以看到我在这里缺少什么?

func generateRandomStringWithLength(length:Int) -> String {

    let randomString:NSMutableString = NSMutableString(capacity: length)

    let letters:NSMutableString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    for index in 0...length {

        let randomIndex:Int = Int(arc4random_uniform(UInt32(62)))
        randomString.append("\(letters.character(at: randomIndex))")

    }

    return String(randomString)
}

【问题讨论】:

标签: ios swift string random generator


【解决方案1】:

你的问题在这里:

letters.character(at: randomIndex)

它的函数返回给定 UTF-16 代码单元索引处的字符,而不仅仅是一个字符

这是我的版本,我想它更快。

func generateRandomStringWithLength(length: Int) -> String {

    var randomString = ""
    let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    for _ in 1...length {
        let randomIndex  = Int(arc4random_uniform(UInt32(letters.characters.count)))
        let a = letters.index(letters.startIndex, offsetBy: randomIndex)
        randomString +=  String(letters[a])
    }

    return randomString
}

generateRandomStringWithLength(length: 5)

【讨论】:

    【解决方案2】:

    使用这个:

    func generateRandomStringWithLength(length:Int) -> String {
    
            let randomString:NSMutableString = NSMutableString(capacity: length)
    
            let letters:NSMutableString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    
            var i: Int = 0
    
            while i < length {
    
                let randomIndex:Int = Int(arc4random_uniform(UInt32(letters.length)))
                randomString.appendString("\(Character( UnicodeScalar( letters.characterAtIndex(randomIndex))))")
                i += 1
            }
    
            return String(randomString)
        }
    

    调用 generateRandomStringWithLength 方法:

    print(generateRandomStringWithLength(5))
    
    print(generateRandomStringWithLength(10))
    
    print(generateRandomStringWithLength(20))
    
    print(generateRandomStringWithLength(7))
    
    print(generateRandomStringWithLength(14))
    

    样本输出:

    GIrqb
    nWmieQRVdk
    r0It9V1xkGFRa2HVwtCw
    RLIRuVI
    nXnFGV2LQ3CjbD
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 2020-04-09
      • 2010-11-10
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多