ОБНОВЛЕННЫЙ ОТВЕТ С НОВЫМ ПОСТАВЛЕННЫМ КОДОМ OP:
Вам потребуется реализовать Equatable
в вашем классе Questions
, чтобы iOS мог сравнивать элементы. Обычно это делается с помощью свойства id. Я обновил ваш класс здесь:
class Questions: Equatable {
static func == (lhs: Questions, rhs: Questions) -> Bool {
return lhs.id == rhs.id
}
let id: Int
let image: String
let prasanje: String
let odgovor1: String
let odgovor2: String
let odgovor3: String
let tocenodgovor: Int
init(questionId: Int, questionImage: String, questionText: String, choice1: String, choice2: String, choice3: String, correctanswer: Int){
id = questionId
image = questionImage
prasanje = questionText
odgovor1 = choice1
odgovor2 = choice2
odgovor3 = choice3
tocenodgovor = correctanswer
}
}
Я обновил ваш класс QuestionBank
, чтобы иметь общий синглтон, чтобы вы могли получить к нему доступ из любого места.
class QuestionBank {
var list = [Questions]()
static var shared = QuestionBank()
init() {
list.append(Questions(questionId: 1, questionImage: "Parking", questionText: "Дополнителната табла поставена под сообраќајниот знак означува:", choice1: "Положба при паркирање на возилото на коловоз", choice2: "Место на кое паркирањето не е дозволено", choice3: "Место на кое паркирањето е временски ограничено", correctanswer: 1))
list.append(Questions(questionId: 2, questionImage: "Policaec", questionText: "Положбата на телото и рацете на униформираниот полициски службеник (како на сликата), означува забрането минување:", choice1: "на возилата кои доаѓаат од насока на бочните страни", choice2: "на возилата кои доаѓаат од насока на грбот и градите", choice3: "на сите возила", correctanswer: 2))
list.append(Questions(questionId: 3, questionImage: "policaec2", questionText: "Според положбата на телото и рацете на униформираниот полициски службеник како на сликата , забрането е минување на:", choice1: "сите возила", choice2: "возилата кои доаѓаат од насока на бочните страни", choice3: "возилата кои доаѓаат од насока на грбот и градите", correctanswer: 3))
list.append(Questions(questionId: 4, questionImage: "semafor", questionText: "Според светлосниот знак на уредот за давање на светлосни сообраќајни знаци (прикажан на сликата):", choice1: "не може да свртите десно, бидејќи нема дополнителна зелена светлечка стрелка", choice2: "имате дозволен премин во сите правци", choice3: "имате дозволен премин само во насока право", correctanswer: 2))
list.append(Questions(questionId: 5, questionImage: "Stop", questionText: "Според начинот на кој е регулиран сообраќајот на крстосницата како на сликата, возачот е должен:", choice1: "да го запре возилото", choice2: "да запре со возилото само доколку има стоп линија", choice3: "да продолжи со движењето", correctanswer: 1))
list.append(Questions(questionId: 6, questionImage: "Dolzina", questionText: "Дополнителната табла поставена под сообраќајниот знак означува:", choice1: "Место каде сообраќајот се одвива во насока на прикажаните стрелки", choice2: "Оддалеченост од место каде започнуваат работите на патот", choice3: "Должина на дел од патот на кој што се изведувааат работи на патот", correctanswer: 3))
}
func getRandomQuestions(_ amount: Int) -> [Questions] {
var randomQuestions = [Questions]()
while randomQuestions.count < amount {
let randomIndex = Int.random(in: 0 ... list.count - 1)
if randomQuestions.contains(list[randomIndex]) == false {
randomQuestions.append(list[randomIndex])
} else {
print("randomQuestions already contains this question.")
}
}
return randomQuestions
}
}
Сейчас в В вашем ViewController (или в любом месте приложения) вы можете получить любое количество случайных вопросов с помощью одной строки кода:
let randomQuestions = QuestionBank.shared.getRandomQuestions(3)
// this is some simple test code or you to print your random questions id and text
for question in randomQuestions {
print(question.id)
print(question.prasanje)
}