Как отобразить правильный label.text в зависимости от индекса рандомизированного массива - PullRequest
0 голосов
/ 06 апреля 2019

Beginner Здесь,

Я кодирую проект, который случайным образом подбирает героев DOTA 2.

В настоящее время я загружаю изображение героя в ImageViews из массива бойцов, используя Int.random.

Однако сейчас я пытаюсь создать соответствующую метку под изображением, чтобы отобразить имя героя, находящегося в данный момент в ImageView.

Сначала я пытаюсь сделать это дляfighterOne at fighters ["1"], которым был бы Рыцарь Дракона.

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

@IBOutlet weak var fighterOne: UIImageView!
@IBOutlet weak var matchButton: UIButton!
@IBOutlet weak var fighterOneName: UILabel!
let fighters = ["1","2","3","4","5","6","7","8","9","10","11","12",]


var randomIndex1: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()
    updateFighterName()
    updateFighters()
}


///// FUNCTIONS /////

func updateFighterName() {     
    if fighterOne.image == UIImage(named: "1") {
        fighterOneName.text = "Dragon Knight"
    } else {
        fighterOneName.text = "Wrong"
    }
}

func updateFighters() {
    randomIndex1 = Int.random(in: 0...11)
    fighterOne.image = UIImage(named: fighters[randomIndex1])
}

Я не могу понять, какой результат я получаю от этого.Когда я запускаю приложение, иногда отображается «Рыцарь Дракона», однако оно не отображается под правильным изображением героя, оно очень нестабильно по отношению к тому, когда оно отображается, и, как я могу судить, отсутствует логическая последовательность отображения.

Любая помощь будет признательна, и дайте мне знать, если вам нужна дополнительная информация!

1 Ответ

0 голосов
/ 06 апреля 2019

Вам нужно позвонить updateFighters(), прежде чем звонить updateFighterName() внутри вашего viewDidLoad(), потому что вы зависите от того, что он делает.

Ваш viewDidLoad() должен выглядеть так:

override func viewDidLoad() {
    super.viewDidLoad()

    updateFighters()
    updateFighterName()
}

А вам нужно заменить:

if fighterOne.image == UIImage(named: "1") {

}

С:

if fighterOne.image.isEqual(UIImage(named: "1")) {

}
...