我是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]
但是很多次连续显示相同的对象
答案 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]