Использование в режиме Swift для проверки состояния приводит к перегреву телефона iOS ⇐ IOS
-
Anonymous
Использование в режиме Swift для проверки состояния приводит к перегреву телефона iOS
Я пытаюсь реализовать простую игру в iOS, используя Swift. игра пошаговая; ходит первый игрок, затем второй игрок, затем первый... Для этого я использую протокол:
class PersonAgent: AgentProtocol { пусть тип агента: Тип агента = .person пусть цвет: UIColor вар точек: Int = 0 частная var TappedLine: Линия? инициализация (цвет: UIColor) { self.color = цвет } func action() async -> Line { в то время как self.tappedLine == ноль {} Guard let TappedLine = self.tappedLine еще { FatalError() } self.tappedLine = ноль вернуть TappedLine } func Tapped (строка: Линия) { self.tapedLine = линия } } Когда пользователь нажимает кнопку, контроллер просмотра вызывает нажатую функцию, и после этого метод действия может что-то вернуть. проблема в том, что телефон перегревается из-за такой простой игры. Могу ли я достичь той же функциональности, не используя while? есть какие-нибудь предложения по повышению эффективности процессора и памяти?
чтобы сделать ситуацию более понятной, в моем контроллере представления есть следующий код:
расширение BoardViewController { частная забавная игра() { печать (# функция) Задача { печать("внутренняя задача") в то время как self.shouldResumeGame() { print("Поворот итерации") вар долженChangeTurn = true пусть текущийАгент: AgentProtocol переключатель self.turn { случай .первый: текущийАгент = self.firstAgent случай .секунда: текущийАгент = сам.ВторойАгент } пусть actionResult = ждет currentAgent.action() // здесь какая-то логика } пусть сообщение: строка if self.firstAgent.points > self. SecondAgent.points { message = «Выиграл первый игрок» } else if self.firstAgent.points < self. SecondAgent.points { message = «Выиграл второй игрок» } еще { сообщение = "Нарисовать" } // МАРК: Игра закончена let alert = UIAlertController(title: «Игра завершена», сообщение: сообщение, предпочтительный стиль: .alert) alert.addAction(UIAlertAction(title: "ОК", стиль: .default, обработчик: { [weak self] _ in self?.navigationController?.popViewController(анимированный: true) })) self.present(предупреждение, анимированное: true) } } частная функция mustResumeGame() -> Bool { вернуть self.firstAgent.points + self. SecondAgent.points != 60 } }
Я пытаюсь реализовать простую игру в iOS, используя Swift. игра пошаговая; ходит первый игрок, затем второй игрок, затем первый... Для этого я использую протокол:
class PersonAgent: AgentProtocol { пусть тип агента: Тип агента = .person пусть цвет: UIColor вар точек: Int = 0 частная var TappedLine: Линия? инициализация (цвет: UIColor) { self.color = цвет } func action() async -> Line { в то время как self.tappedLine == ноль {} Guard let TappedLine = self.tappedLine еще { FatalError() } self.tappedLine = ноль вернуть TappedLine } func Tapped (строка: Линия) { self.tapedLine = линия } } Когда пользователь нажимает кнопку, контроллер просмотра вызывает нажатую функцию, и после этого метод действия может что-то вернуть. проблема в том, что телефон перегревается из-за такой простой игры. Могу ли я достичь той же функциональности, не используя while? есть какие-нибудь предложения по повышению эффективности процессора и памяти?
чтобы сделать ситуацию более понятной, в моем контроллере представления есть следующий код:
расширение BoardViewController { частная забавная игра() { печать (# функция) Задача { печать("внутренняя задача") в то время как self.shouldResumeGame() { print("Поворот итерации") вар долженChangeTurn = true пусть текущийАгент: AgentProtocol переключатель self.turn { случай .первый: текущийАгент = self.firstAgent случай .секунда: текущийАгент = сам.ВторойАгент } пусть actionResult = ждет currentAgent.action() // здесь какая-то логика } пусть сообщение: строка if self.firstAgent.points > self. SecondAgent.points { message = «Выиграл первый игрок» } else if self.firstAgent.points < self. SecondAgent.points { message = «Выиграл второй игрок» } еще { сообщение = "Нарисовать" } // МАРК: Игра закончена let alert = UIAlertController(title: «Игра завершена», сообщение: сообщение, предпочтительный стиль: .alert) alert.addAction(UIAlertAction(title: "ОК", стиль: .default, обработчик: { [weak self] _ in self?.navigationController?.popViewController(анимированный: true) })) self.present(предупреждение, анимированное: true) } } частная функция mustResumeGame() -> Bool { вернуть self.firstAgent.points + self. SecondAgent.points != 60 } }
Мобильная версия