我是 swift 新手,尝试了各种方法来让它发挥作用
我有一个在 viewDidLoad() 方法内的 viewController 内创建的数组对象。里面有5个物体。
var objectss: [CustomClass] = [] // Five objects are created inside viewDidLoad() and added to this array
每个对象的索引从0到4开始
我有一个 IBAction 按钮,可以随机选择类数组内的对象之一
此外,我会注意到每个对象都有一个按钮(这意味着我在 View Controller 上有 6 个按钮,每个按钮都有一个从 0 开始并递增到 5 的标签)
因此,为了解释为什么有 5 个而不是 4 个,我将这些按钮连接到一个 IBAction 中,并使用了一个具有两种情况的开关。第一种情况是 0, 1, 2, 3, 4 并将在顶部创建的类变量引用分配给相等的对象[sender.tag],因此如果用户单击第一个按钮(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]
但是多次连续显示同一对象
最佳答案
我真的不知道你在开关的情况5
中想要做什么,但是为了避免连续获得相同的对象,你可以存储最后选择的对象并继续生成一个新的号码,只要生成的号码与上次选择的号码相同即可。
因此在类级别声明此变量:
var lastSelectedObjectIndex = -1
在情况 5
中,执行以下操作:
var random = Int(arc4random_uniform(4))
while random == lastSelectedObjectIndex {
random = Int(arc4random_uniform(4))
}
lastSelectedObjectIndex = random
objectSelected = objectss[random]
关于arrays - 从数组中随机选择一个对象,而不在一行中重复对象而不删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908883/