Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
随机字母数字字符串Linux Swift 3_Linux_Random_Swift3_Ubuntu 16.04_Vapor - Fatal编程技术网

随机字母数字字符串Linux Swift 3

随机字母数字字符串Linux Swift 3,linux,random,swift3,ubuntu-16.04,vapor,Linux,Random,Swift3,Ubuntu 16.04,Vapor,在Linux中使用Swift 3生成随机字符串时,我遇到了两个问题 arc4random_uniform在Linux中仅在BSD上不可用。所以我可以不用使用random()函数。当我生成一个可变大小的随机数时,这就起作用了(见下面的代码) 为linux修改的代码块 func randomString(_ length: Int) -> String { let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJ

在Linux中使用Swift 3生成随机字符串时,我遇到了两个问题

  • arc4random_uniform在Linux中仅在BSD上不可用。所以我可以不用使用random()函数。当我生成一个可变大小的随机数时,这就起作用了(见下面的代码)

    为linux修改的代码块

        func randomString(_ length: Int) -> String
        {
    
    let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let len = letters.characters.count
    
    var randomString = ""
    
    #if os(Linux)
    
        for _ in 0..<length
        {
            let randomValue = (random() % len) + 1
    
            randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(randomValue))])"
        }
    
        #else
        for _ in 0 ..< length
        {
            let rand = arc4random_uniform(UInt32(len))
    
            randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(rand))])"
        }
        #endif
    
    
          return randomString
    }          
    
    func-randomString(u-length:Int)->String
    {
    let字母:String=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz012456789”
    让len=letters.characters.count
    var randomString=“”
    #如果操作系统(Linux)
    对于uu0..1)始终使用相同的数字

    您必须设置一次种子才能从
    random()
    获取“随机”数:

    :

    如果未提供种子值,则将使用random()函数 使用值1自动设定种子

    由于种子总是相同的(1),所以总是得到相同的“随机”数序列

    2)字母数字字符串

    要创建字符串而不使用
    NSString

    func randomString(length: Int) -> String {
    
        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        let len = UInt32(letters.characters.count)
    
        var randomString = ""
    
        for _ in 0 ..< length {
            let rand = myCustomRandom(len)
            let randIndex = letters.index(letters.startIndex, offsetBy: Int(rand))
            let nextChar = letters[randIndex]
            randomString += String(nextChar)
        }
    
        return randomString
    }
    
    func randomString(长度:Int)->String{
    let letter letters=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”
    设len=UInt32(字母.字符.计数)
    var randomString=“”
    对于uu0..<长度{
    设rand=myCustomRandom(len)
    设randex=letters.index(letters.startIndex,offsetBy:Int(rand))
    让nextChar=字母[randIndex]
    随机字符串+=字符串(nextChar)
    }
    返回随机字符串
    }
    
    找到了答案

    因此,重复随机数/字符串的答案是在调用random()函数之前添加这一行

    srand(UInt32(time(nil)))
    
    我假设这也是修复非法指令的原因,因为我不记得还改变了什么

    不用说,这是我的最终结果

     func generateRandomNumber() -> Int
     {
        var place = 1
    
        var finalNumber = 0;
    
        #if os(Linux)
    
        srand(UInt32(time(nil)))
    
        for _ in 0..<5
        {
            place *= 10
    
            let randomNumber = Int(random() % 10) + 1
    
            finalNumber += randomNumber * place
        }
        #else
        for _ in 0..<5
        {
            place *= 10
    
            let randomNumber = Int(arc4random_uniform(10))
    
            finalNumber += randomNumber * place
        }
        #endif
    
         return finalNumber
     }
    
    
    
     func randomString(_ length: Int) -> String
     {
    
        let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        let len = letters.characters.count
    
        var randomString = ""
    
        #if os(Linux)
    
        srand(UInt32(time(nil)))
    
       for _ in 0..<length
       {
         let randomValue = (random() % len) + 1
    
         randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(randomValue))])"
       }
    
       #else
      for _ in 0 ..< length
      {
         let rand = arc4random_uniform(UInt32(len))
    
         randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(rand))])"
      }
      #endif
    
       return randomString
     }  
    
    func generateRandomNumber()->Int
    {
    变量位置=1
    var finalNumber=0;
    #如果操作系统(Linux)
    srand(UInt32(时间(零)))
    
    对于uu0..我复制并粘贴了您的代码,但它无法编译

    致命错误:无法从空字符串形成字符

    以下是另一种方法:
    这对我在Ubuntu上很有用。

    Swift 4.2、Ubuntu 16.04

    let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let len = letters.count
    var randomString:String = ""
    for _ in 0 ..< length {
       let rand = Int.random(in: 0..<len)
       randomString += letters.map { String($0) }[rand]
    }
    
    let字母:String=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzo123456789”
    让len=字母数
    var randomString:String=“”
    对于uu0..<长度{
    
    让rand=Int.random(in:0..感谢您的第一个答案,但是您提供的字母数字字符串部分不支持arc4random_统一,因为它在linux上。当然。您必须使用种子
    random()
    。更新的答案。啊看起来不错。是因为它是swift 4吗?不,这没有使用任何swift 4功能。;)
    func randomString(length: Int) -> String {
    
        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        let len = UInt32(letters.characters.count)
    
        var randomString = ""
    
        for _ in 0 ..< length {
            let rand = myCustomRandom(len)
            let randIndex = letters.index(letters.startIndex, offsetBy: Int(rand))
            let nextChar = letters[randIndex]
            randomString += String(nextChar)
        }
    
        return randomString
    }
    
    srand(UInt32(time(nil)))
    
     func generateRandomNumber() -> Int
     {
        var place = 1
    
        var finalNumber = 0;
    
        #if os(Linux)
    
        srand(UInt32(time(nil)))
    
        for _ in 0..<5
        {
            place *= 10
    
            let randomNumber = Int(random() % 10) + 1
    
            finalNumber += randomNumber * place
        }
        #else
        for _ in 0..<5
        {
            place *= 10
    
            let randomNumber = Int(arc4random_uniform(10))
    
            finalNumber += randomNumber * place
        }
        #endif
    
         return finalNumber
     }
    
    
    
     func randomString(_ length: Int) -> String
     {
    
        let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        let len = letters.characters.count
    
        var randomString = ""
    
        #if os(Linux)
    
        srand(UInt32(time(nil)))
    
       for _ in 0..<length
       {
         let randomValue = (random() % len) + 1
    
         randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(randomValue))])"
       }
    
       #else
      for _ in 0 ..< length
      {
         let rand = arc4random_uniform(UInt32(len))
    
         randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(rand))])"
      }
      #endif
    
       return randomString
     }  
    
    // Keep at top of your code (outside of functions)
    #if os(Linux)
        srandom(UInt32(time(nil)))
    #endif
    
    
    func getRandomNumber(_ min: Int, _ max: Int) -> Int {
        #if os(Linux)
            return Int(random() % max) + min
        #else
            return Int(arc4random_uniform(UInt32(max)) + UInt32(min))
        #endif
    }
    
    
    func getRandomString(_ chars: String, _ length: Int) -> String {
        var str = ""
    
        for _ in 1...length {
            str.append(chars.itemOnStartIndex(advancedBy: getRandomNumber(0, chars.count - 1)))
        }
    
        return str
    }
    
    
    // Best practice to define this outside of the function itself
    let chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    print(getRandomString(chars, 10))
    
    let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let len = letters.count
    var randomString:String = ""
    for _ in 0 ..< length {
       let rand = Int.random(in: 0..<len)
       randomString += letters.map { String($0) }[rand]
    }