Бесконечный цикл While в Swift

возникла проблема, мне нужно поставить условие выполнения цикла, до определенного числа, подскажите пожалуйста, почему не соблюдается условие и он останавливается на одном определенном числе и не продолжается до условия которое я ему задал? (функция next())

Вот код:

import UIKit

class Round { // информация которая будет содержать предыдущий шаг и текущий
    var warrior1: Unit // 1 воин
    var warrior2: Unit // 2 воин
    var previousSteps: [RoundStep] // информация предыдущего шага
    
    init(warrior1: Unit, warrior2: Unit) {
        self.warrior1 = warrior1
        self.warrior2 =  warrior2
        self.previousSteps = []
    }
    var winner: [String : Int] = [:] // словарь для записи имен и побед
    
    func start() {
        winner = [:]
        self.warrior1.characteristics = warrior1.characteristics
    }
    
    let attackOne = RoundStep.init(attackerId: 1, defenderId: 2, damage: 50, countRounds: 0)
    let attactTwo = RoundStep.init(attackerId: 2, defenderId: 1, damage: 50, countRounds: 0)
    

    func next() {
        var step =  [warrior1.id : warrior1.characteristics.health, warrior2.id : warrior2.characteristics.health]
        if (step[warrior1.id] != nil) && attackOne.attackerId == 1 {
            repeat {
                step.updateValue(warrior1.characteristics.health - Int.random(in: warrior2.characteristics.damage), forKey: warrior1.id)
                step.updateValue(warrior2.characteristics.health - Int.random(in: warrior1.characteristics.damage), forKey: warrior2.id)
                print(step)
            } while (warrior2.characteristics.health <= 0)
            
        }
    }

    func pastSteps() -> [String : Int] {
        print(winner)
        return winner
    }
    
    func nextGame() {
        winner.updateValue(0, forKey: warrior1.characteristics.name)
        winner.updateValue(0, forKey: warrior2.characteristics.name)
    }
}

struct Characteristics { // присвоение константам характеристик
    var name: String
    var health: Int
    var damage: Range<Int> // от какого то до какого то значения будет записываться урон
    
}

struct Unit { // информация о персонаже
    var characteristics: Characteristics // характеристики
    var id: Int // идеентификатор

}

struct UnitUI { // ---
}

struct RoundStep { // что шаг представляет из себя
    let attackerId: Int // атакующий
    let defenderId: Int // защиющий
    let damage: Int // дамаг
    let countRounds: Int
}

let round1 = Round.init(warrior1: Unit.init(characteristics: Characteristics.init(name: "Ivan", health: 1000, damage: 50..<100), id: 1), warrior2: Unit.init(characteristics: Characteristics.init(name: "Medved", health: 1000, damage: 50..<100), id: 2))
round1.start()
round1.pastSteps()
round1.next()

Ответы (1 шт):

Автор решения: Oleg Soloviev

У вас задано условие, которое не выполняется:

while (warrior2.characteristics.health <= 0)

При этом функция repeat while выполняется хотя бы раз, поэтому выводится 1 результат.

Должно быть:

while (warrior2.characteristics.health >= 0)

Тогда цикл будет выполняться.

→ Ссылка