Я новичок в Swift и пробовал разные способы заставить это работать.
У меня есть объект массивов, которые были созданы внутри viewController внутри метода viewDidLoad(). Внутри 5 предметов.
var objectss: [CustomClass] = [] // Five objects are created inside viewDidLoad() and added to this array
Индекс каждого объекта начинается с 0 до 4
У меня есть кнопка IBAction, которая случайным образом выбирает один из объектов внутри массива классов.
Также отмечу, что у каждого объекта есть кнопка (это означает, что у меня есть 6 кнопок на контроллере представления с тегом для каждой, начиная с 0 и увеличивая до 5)
Итак, чтобы объяснить, почему есть 5 вместо того, чтобы остановиться на 4, я подключил эти кнопки к одному IBAction и использовал переключатель, который имеет два случая. Первый случай — 0, 1, 2, 3, 4 и присваивает ссылку на переменную класса, созданную сверху, равным объектам [sender.tag], поэтому, если пользователь нажимает первую кнопку (тег = 0), он отображает информацию об объекте в индекс 0 (внутри массива) для отображения в следующую секундуViewController
Второй случай - 5, который представляет собой случайную кнопку, которая случайным образом получает объект из массива и отображает информацию об этом объекте на следующем втором ViewController.
Поэтому я надеюсь, что использование sender.tag для определения того, какая кнопка нажата, имеет смысл.
Внутри @IBAction я сделал это:
switch sender.tag {
case 0, 1, 2, 3, 4:
objectSelected = objectss[sender.tag]
case 5:
let index = Int(arc4random_uniform(4))
var random: Int
repeat{
random = Int(arc4random_uniform(4))
} while index == random
objectSelected = objectss[random]
default:
break
}
Я пытался сделать это таким образом, чтобы перестать получать один и тот же объект подряд, но он все еще делает это, и иногда требуется вечность для отображения некоторых других объектов во втором ViewController.
я тоже уже пробовал
let index = Int(arc4random_uniform(UInt32(objectss.count)))
objectSelected = objectss[index]
Но это продолжало показывать один и тот же объект подряд много раз