Swift: проблемы с перетасовкой ответов в приложении викторины/викторины ⇐ IOS
Swift: проблемы с перетасовкой ответов в приложении викторины/викторины
Пожалуйста, помогите мне, поскольку я новичок в SwiftUI и программировании в целом. Это мой первый раз, когда я разрабатываю викторину. Я столкнулся с проблемой перетасовки ответов на простые вопросы. Я пытаюсь создать функцию, содержащую все ответы, включая правильный, и перемешивающую их случайным образом, но я действительно не знаю, как это сделать. Пожалуйста, помогите мне, любая небольшая помощь очень ценится.
Это мой код для TriviaAPIData:
импортировать фундамент struct ВопросОтвет: Декодируемый { вар результаты: [Вопрос] } struct Ответ: Идентифицируемый { вар идентификатор = UUID() переменный текст: строка вар isCorrect: Bool } struct Вопрос: Декодируемый { Категория var: Строка вар вопрос: Строка var правильныйОтвет: Строка var неверные ответы: [Строка] } Это мой код для TriviaAPI:
импортировать фундамент импортировать SwiftUI класс TriviaAPI: ObservableObject { структура TriviaAnswer { пусть текст: строка пусть isCorrect: Bool } @Published var QnAData: [Вопрос] = [] func getQnAData(selectedCategoryNumber: Int, selectedDifficultyInPopup: String) асинхронный бросок { let endpoint = "https://opentdb.com/api.php?amount=10&c ... de=url3986" Guard let url = URL (строка: конечная точка) еще {throw APIErrors.invalidURL} запрос вар = URLRequest (url: URL) request.httpMethod = "ПОЛУЧИТЬ" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let (данные, ответ) = попробуйте дождаться URLSession.shared.data (для: запроса) охранник пусть ответ = ответ как? HTTPURLResponse, response.statusCode == 200 else { бросить APIErrors.invalidResponse } делать { пусть декодер = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase let вопросОтвет = попробуйте decoder.decode(QuestionResponse.self, from: data) DispatchQueue.main.sync { self.QnAData = вопросОтвет.результаты } } ловить { бросить APIErrors.invalidData } } } Вот мой код для QuizGameScreen:
импортировать фундамент импортировать SwiftUI структура QuizGameScreen: Посмотреть { @StateObject вар API = TriviaAPI() @Binding var selectedCategoryNumber: Int @Binding var selectedCategoryName: String @State var currentQuestionIndex = 0 @Binding var selectedDifficultyInPopup: String функция shuffleAnswers() { var CorrectAnswers = [api.QnAData[currentQuestionIndex].correctAnswer] var неправильноAnswers = api.QnAData[currentQuestionIndex].incorrectAnswers пусть allAnswers = правильные ответы + неправильные ответы вар shuffelQuestions = allAnswers.shuffled() } var body: some View { ZStack{ Изображение("NewBgQuizUp") .изменяемый размер() .scaledToFill() .edgesIgnoringSafeArea(.all) .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight:.infinity) VStack(выравнивание: .leading){ Текст("Викторина") .font(.system(размер: 36, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(x: -100, y: -350) } Текст("1 из 0") .font(.system(размер: 23, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(x: 100, y: -300) VStack{ если !api.QnAData.isEmpty { if currentQuestionIndex < api.QnAData.count { // Проверяем, находится ли текущий индекс вопроса в пределах границ if let decodedQuestion = api.QnAData[currentQuestionIndex].question.removingPercentEncoding { Текст (расшифрованный вопрос) .font(.system(размер: 23, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(y: -100) } еще { Text("Не удалось расшифровать вопрос") .font(.system(размер: 23, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(y: -100) } ForEach(0..
Пожалуйста, помогите мне, поскольку я новичок в SwiftUI и программировании в целом. Это мой первый раз, когда я разрабатываю викторину. Я столкнулся с проблемой перетасовки ответов на простые вопросы. Я пытаюсь создать функцию, содержащую все ответы, включая правильный, и перемешивающую их случайным образом, но я действительно не знаю, как это сделать. Пожалуйста, помогите мне, любая небольшая помощь очень ценится.
Это мой код для TriviaAPIData:
импортировать фундамент struct ВопросОтвет: Декодируемый { вар результаты: [Вопрос] } struct Ответ: Идентифицируемый { вар идентификатор = UUID() переменный текст: строка вар isCorrect: Bool } struct Вопрос: Декодируемый { Категория var: Строка вар вопрос: Строка var правильныйОтвет: Строка var неверные ответы: [Строка] } Это мой код для TriviaAPI:
импортировать фундамент импортировать SwiftUI класс TriviaAPI: ObservableObject { структура TriviaAnswer { пусть текст: строка пусть isCorrect: Bool } @Published var QnAData: [Вопрос] = [] func getQnAData(selectedCategoryNumber: Int, selectedDifficultyInPopup: String) асинхронный бросок { let endpoint = "https://opentdb.com/api.php?amount=10&c ... de=url3986" Guard let url = URL (строка: конечная точка) еще {throw APIErrors.invalidURL} запрос вар = URLRequest (url: URL) request.httpMethod = "ПОЛУЧИТЬ" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let (данные, ответ) = попробуйте дождаться URLSession.shared.data (для: запроса) охранник пусть ответ = ответ как? HTTPURLResponse, response.statusCode == 200 else { бросить APIErrors.invalidResponse } делать { пусть декодер = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase let вопросОтвет = попробуйте decoder.decode(QuestionResponse.self, from: data) DispatchQueue.main.sync { self.QnAData = вопросОтвет.результаты } } ловить { бросить APIErrors.invalidData } } } Вот мой код для QuizGameScreen:
импортировать фундамент импортировать SwiftUI структура QuizGameScreen: Посмотреть { @StateObject вар API = TriviaAPI() @Binding var selectedCategoryNumber: Int @Binding var selectedCategoryName: String @State var currentQuestionIndex = 0 @Binding var selectedDifficultyInPopup: String функция shuffleAnswers() { var CorrectAnswers = [api.QnAData[currentQuestionIndex].correctAnswer] var неправильноAnswers = api.QnAData[currentQuestionIndex].incorrectAnswers пусть allAnswers = правильные ответы + неправильные ответы вар shuffelQuestions = allAnswers.shuffled() } var body: some View { ZStack{ Изображение("NewBgQuizUp") .изменяемый размер() .scaledToFill() .edgesIgnoringSafeArea(.all) .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight:.infinity) VStack(выравнивание: .leading){ Текст("Викторина") .font(.system(размер: 36, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(x: -100, y: -350) } Текст("1 из 0") .font(.system(размер: 23, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(x: 100, y: -300) VStack{ если !api.QnAData.isEmpty { if currentQuestionIndex < api.QnAData.count { // Проверяем, находится ли текущий индекс вопроса в пределах границ if let decodedQuestion = api.QnAData[currentQuestionIndex].question.removingPercentEncoding { Текст (расшифрованный вопрос) .font(.system(размер: 23, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(y: -100) } еще { Text("Не удалось расшифровать вопрос") .font(.system(размер: 23, дизайн: .rounded)).fontWeight(.bold) .foregroundColor(.white) .offset(y: -100) } ForEach(0..
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создание викторины на Java с использованием массивов. Нужны указатели с оценкой ответов
Anonymous » » в форуме JAVA - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Удаленная форма Rails UJS оценивает JS только для ответов 2XX, но не для ответов 4XX
Anonymous » » в форуме Jquery - 0 Ответы
- 58 Просмотры
-
Последнее сообщение Anonymous
-