vendredi 6 novembre 2020

How to generate a unique number in Swift without repeating any previous random numbers till all numbers in range are exhausted?

This is my code. When generateNewNumber function is executed how can I make it that every new word, thus every consequent index is a new one, until wordBank.count - 1 index are generated? Like every new word should be a new one, every new randomIndex should not repeat any of the previous ones, should be unique.

import UIKit
import LGButton
import SCLAlertView


class ViewController: UIViewController, UINavigationControllerDelegate {

var randomIndex = Int.random(in: 1..<14)
let wordBank = ["Cats", "lions", "giraffe", "kangaroo", "animal", "apple", "glass", "class", "kettle", "stove"]

    @objc func generateNewNumber() {

        self.randomIndex = Int.random(in: 1..<self.wordBank.count-1)
        let alertView = SCLAlertView()
        alertView.addButton("Learn more", target: self, selector: #selector(self.generateNewNumber))
        alertView.addButton("Second button", target: self, selector: #selector())
         alertView.showSuccess("Word", subTitle: self.wordBank[self.randomIndex])

        

    }

    @IBAction func learning(_ sender: LGButton) {

        sender.isLoading = true
        let deadlineTime = DispatchTime.now() + .seconds(2)
        DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
            sender.isLoading = false
            let alertView = SCLAlertView()
            alertView.addButton("Learn more", target: self, selector: #selector(self.generateNewNumber))
             alertView.addButton("Second button", target: self, selector: #selector())
            alertView.showSuccess("Word", subTitle: self.wordBank[self.randomIndex])

        }

}
    @IBOutlet var instanceofLGButton: LGButton!

    override func viewDidLoad() {

        super.viewDidLoad()
            self.instanceofLGButton.addTarget(self, action: #selector(self.learning(_:)), for: .touchUpInside)

    }

}

I tried from another StackOverflow post


func randomNumber() -> UInt32 {
    var randomNumber = arc4random_uniform(10)
    while previousNumber == randomNumber {
        randomNumber = arc4random_uniform(10)
    }
    previousNumber = randomNumber
    return randomNumber
}

and then

var next: Int

repeat {
    next = Int(arc4random_uniform(9))
} while current == next

Why don't these work?




Aucun commentaire:

Enregistrer un commentaire