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

标签 arrays swift random uibutton

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

相关文章:

java - 如何在数组填满时结束的循环中随机填充二维数组

ios - 使 UILabel 或 UITextView 的最后几行快速淡出。请检查所附图片

ios - 如何判断 AVPlayer 已播放三秒 Swift

c - 如果索引反向迭代,则段错误(核心已转储)

ios - Swift 中根据属性删除数组对象

swift - 协议(protocol)中的 self

java - 如何在两个不同点之间绘制移动动画线

c++ - 如何创建一个不会重复结果的随机事件?

ios - 如果我在 5 点或 5 :01, 调用 arc4random_uniform(6),我会得到相同的数字吗?

java - ArayIndexOutOfBoundsException 不起作用