从数组中随机选择一个对象,而不会在不删除的情况下重复行中的对象

时间:2017-08-27 20:06:36

标签: arrays swift random uibutton

我是swift的新手,并尝试了各种方法让它工作

我有一个在viewDidLoad()方法内的viewController内创建的数组对象。里面有5个物体。

var objectss: [CustomClass] = [] // Five objects are created inside viewDidLoad() and added to this array

每个objectss索引从0到4

开始

我有一个IBAction按钮,可以随机选择Class Array中的一个对象

另外我会注意到每个对象都有一个按钮(意思是我在视图控制器上有6个按钮,每个按钮都有一个从0开始并递增到5的标记)

因此,为了解释为什么有5而不是停在4是我将这些按钮连接到一个IBAction并使用了一个有两个案例的开关。第一种情况是0,1,2,3,4并将在顶部创建的Class变量引用赋予相等的objectss [sender.tag],因此如果用户单击第一个按钮(tag = 0),它将显示对象&#39 ;索引0(在数组内)的信息显示在下一个secondViewController

第二种情况是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
 }

我尝试这样做是为了停止连续获取相同的对象,但它仍然会这样做,有时需要永远显示在secondViewController中的其他一些对象。

我还试过

let index = Int(arc4random_uniform(UInt32(objectss.count)))
objectSelected = objectss[index]

但是很多次连续显示相同的对象

1 个答案:

答案 0 :(得分:0)

我真的不知道你在交换机的case 5中想要做什么,但是为了避免连续获得相同的对象,你可以存储最后选择的对象并继续生成新的数字,只要生成的数字与最后选择的数字相同。

所以在类级声明这个变量:

var lastSelectedObjectIndex = -1

case 5中,执行以下操作:

var random = Int(arc4random_uniform(4))
while random == lastSelectedObjectIndex {
    random = Int(arc4random_uniform(4))
}
lastSelectedObjectIndex = random
objectSelected = objectss[random]