Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

gerar numero randomico que nao repete..

Como faco pra gerar um numero randomico, mas sem repetir? tentei com codigo abaixo mas nao funcionou!


import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var pergunta: UILabel!
    @IBOutlet weak var resposta: UILabel!

    let bancoDados = [
        ["O que é um vinho?", "O vinho é uma bebida alcoólica produzida exclusivamente de uva. Segundo a legislação brasileira, o vinho tem que apresentar no mínimo 7% de teor alcoólico. A quantidade varia com o tipo (tranquilo, espumante, licoroso entre outros)."],
        ["O que é Uva?", "A uva é o fruto da videira (Vitis sp.), uma planta da família das Vitaceae. É utilizada frequentemente para produzir sumo, doce (geleia), vinho e passas, podendo também ser consumida ao natural."],
        ["O que é Barrica de Caravalho?", "A barrica é utilizada para o envelhecimento do vinho, enquanto o sabor e aroma são consequências. Quem usa apenas para dizer que passou por carvalho ou para dar aroma e gosto, geralmente acaba comprometendo o vinho."],
        ["O que faz um enólogo?", "O enólogo é o responsável pelo plantio das uvas, vinificação e engarrafamento, ou seja, está presente em quase todas as etapas de preparo."],
        ]

    var indice = 0
    var indiceAnterior = -1

    override func viewDidLoad() {
        super.viewDidLoad()
        atualizaTela()
    }

    @IBAction func botao(_ sender: UIButton) {
        atualizaTela()
    }


    func atualizaTela() {

        while indice == indiceAnterior {
            indice = Int.random(in: 0..<bancoDados.count)
            }
        pergunta.text = bancoDados[indice][0]
        resposta.text = bancoDados[indice][1]
        indice = indiceAnterior

        print(indice)
        print(indiceAnterior)

    }
1 resposta
solução!

Cara, não sei se há uma melhor forma de implementar isso, mas eu faria desse jeito:

Primeiro, criaria um Array de Int para armazenar todos os indices que já foram escolhidos randomicamente; Criaria um método cuja única responsabilidade é retornar um Int (gerado randomicamente); Na implementação do método, criaria uma variavel que gera o int e abaixo dela um laço do tipo while, que repete enquanto o número gerado for igual a qualquer número dentro da sua array.

var alreadyGeneratedNumbers = Array<Int>()

private func generateRandomNumber() -> Int {
    var generatedNumber = Int.random(in: 0..<bancoDados.count)

    //Caso o número criado na variável acima já exista no array, ele entra dentro do loop while
    while(alreadyGeneratedNumbers.contains(generatedNumber)) {
        generatedNumber = Int.random(in: 0..<bancoDados.count)
    }

    return generatedNumber
}

Feito isso, é só você fazer o append desse número no array em algum ponto, para que ele não seja escolhido novamente