如何改组UIViews

时间:2019-02-01 14:48:03

标签: arrays swift view shuffle

我正在尝试构建一个具有10个UIView的应用,当您按下一个按钮时,它会一次随机显示一个。我创建了一个视图数组(我不知道我是否以正确的方式进行了操作),并且我试图对函数进行编码以显示它们(随机,一次)。 所以现在我有十个UIView(我只是在这里放一个给你看,但我有十个):

@IBOutlet weak var messageView: UIView! 
var messageArray = [UIView] ()
var currentVisibleMViews = 1

和viewDidLoad内部(显然我仍然这样做10次):

messageArray.append(messageView)

现在,我也连接了按钮,尝试了不同的操作。现在是这样的:

 @IBAction func addMessageViewButton(_ sender: Any) {
      if currentVisibleMViews > 9 {
        messageArray.forEach { (uiview) in
            uiview.isHidden = true
        }
        currentVisibleMViews = 0

    } else {
        messageArray[currentVisibleMViews].isHidden = false
        currentVisibleMViews += 1

   }

  }

这样,它一次显示一个视图,但是当我有10个视图时,将全部删除。 另外,例如,如果我有8个视图,则我关闭messageView6,然后再次按addMessageViewButton,它不会显示messageView6,而是显示messageView9(这就是为什么我希望它们是随机的)。

我用谷歌搜索了如何做我想做的事情,上面写着我应该尝试使用Fisher Yates Shuffle算法,但是我不知道该怎么做,因为我的数组包含UIViews。有解决办法吗?

2 个答案:

答案 0 :(得分:2)

您是否听说过或尝试使用本机Swift方法shufle()

https://developer.apple.com/documentation/swift/array/2994753-shuffle

var names = [uviewC, uviewF, uviewE, uviewA, uviewD, uviewB]
names.shuffle(using:)

会产生类似这样的结果:

[uviewD, uviewE, uviewB, uviewC, uviewF, uviewA]

答案 1 :(得分:2)

我会避免保留易于计算的状态,因为它只会使您复杂化:

{{1}}