gpt4 book ai didi

arrays - 从数组中随机选择一个对象,而不在一行中重复对象而不删除

转载 作者:行者123 更新时间:2023-11-30 12:12:14 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com