Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sprint 05 #695

Open
wants to merge 5 commits into
base: project_sprint_3_start
Choose a base branch
from
Open

Conversation

s1zzen
Copy link

@s1zzen s1zzen commented Jan 24, 2024

Не придумал, как сделать так, чтобы вопросы не повторялись, если подскажете, в какую сторону думать, буду сильно признателен)

delegate?.didReceiveNextQuestion(question: question)
}

init(delegate: QuestionFactoryDelegate?) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Стоит организовывать код следующим образом:

  • Публичные переменные
  • IBOutlet
  • Приватные переменные
  • Публичные методы(сначала initы, overrideы, и потом остальные)
  • Приватные методы
  • IBAction

Подробнее почитать можно тут: Организация кода

]

func requestNextQuestion() {
guard let index = (0..<questions.count).randomElement() else { return }
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

    /// Массив с вопросами, которых еще не было в игре. Если массив обнуляется, то его необходимо заново заполнить
    /// всеми вопросами
    private var activeQuestions: [QuizQuestion]
    
    init(delegate: QuestionFactoryDelegate?) {
        self.delegate = delegate
        self.activeQuestions = questions
    }
    
    func requestNextQuestion() {
        guard let question = getQuestion() else { return }
        
        delegate?.didReceiveNextQuestion(question: question)
    }
    
    private func getQuestion() -> QuizQuestion? {
        guard let index = (0..<activeQuestions.count).randomElement() else { return nil }
        
        let question = activeQuestions[safe: index]
        
        //удаление из массива вопроса, только что сформированного для показа
        activeQuestions.remove(at: index)
        
        // если были показаны все вопросы, то заполняем массив всеми вопросами заново
        if activeQuestions.count == 0 {
            activeQuestions = questions
        }
        
        return question
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants