Не повторять слова в Swift при нажатии кнопки - IOS - PullRequest
1 голос
/ 13 марта 2020

Как я не могу повторить массив, когда я нажимаю на кнопку в swift? Я пытаюсь приносить фрукты без их повторения. Могу ли я отсортировать строку так, чтобы она проходила через все фрукты один за другим? Это не должно быть рандомизировано. Я просто хочу, чтобы каждое слово показывалось только один раз, когда я нажимаю кнопку и показываю последний массив «Не осталось никаких вариантов фруктов»

Я попытался рандомизировать строку, но это повторяет фрукты. Я просто хочу, чтобы это было go один за другим. Когда я нажимаю кнопку на моем экране, вывод на этикетке с изображением должен давать мне каждый фрукт по одному.

ie. Нажата кнопка «Выход:« Яблоко »

кнопка нажата снова Выход:« Банан »

и так далее, пока в последней строке не появится« Не осталось никаких вариантов фруктов »

import UIKit

class fruitrandomViewController: UIViewController {
@IBOutlet weak var nextfruitButton: UIButton!
@IBOutlet weak var fruitbox: UILabel!

@IBAction func fruitbutton(_ sender: UIButton) {

    let array = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear","T"There aren't any fruit options left",]


    let randomFruitgenerator = Int(arc4random_uniform(UInt32(array.count)))
    fruitbox.text = array[randomFruitgenerator]

    }
}

1 Ответ

1 голос
/ 13 марта 2020

Вам нужно как-то отслеживать элементы массива, которые вы уже использовали. Это можно сделать несколькими способами:

  1. Сохранить свойство индекса, которое отслеживает следующий элемент массива
  2. Изменять сам массив по мере использования элементов

В любом случае, вы должны сделать массив свойством экземпляра, а не локальной переменной в самой функции.

Вот пример второго подхода (я предпочитаю это, так как я думаю, что он делает код немного проще, так как вам не нужно отслеживать следующий индекс).

class fruitrandomViewController: UIViewController {
    @IBOutlet weak var nextfruitButton: UIButton!
    @IBOutlet weak var fruitbox: UILabel!

    var fruit = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear",].shuffled()

    @IBAction func fruitbutton(_ sender: UIButton) {

        if fruit.isEmpty {
            fruitbox.text = "There's no more fruit left"
        } else {
            fruitbox.text = self.fruit[0]
            self.fruit.remove(at:0)
        }
    }
}

Для полноты, вот первый подход (с добавленной кнопкой «предыдущий фрукт»):

class fruitrandomViewController: UIViewController {
    @IBOutlet weak var nextfruitButton: UIButton!
    @IBOutlet weak var fruitbox: UILabel!

    let fruit = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear",].shuffled()
    var nextFruit = 0

    @IBAction func fruitbutton(_ sender: UIButton) {

        if nextFruit < fruit.count {
            fruitbox.text = self.fruit[nextFruit]
            nextFruit += 1
        } else {
            fruitbox.text = "There's no more fruit left"

        }
    }

    @IBAction func previousFruitButton(_ sender: UIButton) {

        guard nextFruit > 0 else  {  
            return
        }             
        nextFruit -= 1
        fruitbox.text = self.fruit[nextFruit]
    }
}

Если вы не хотите, чтобы фрукты были в случайном порядке, просто удалите .shuffled()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...