如何洗牌UIViews数组

问题描述 投票:1回答:2

我试图建立一个应用程序在那里我有10个UIViews,当你按下一个按钮,它随机显示他们一次一个。我创建的意见阵列(我不知道如果我这样做,以正确的方式),我试图代码的函数来显示它们(随机,一次一个)。所以,现在我有十UIViews(我只是把一个到这里来告诉你,但我有10个):

@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(这就是为什么我希望他们是随机的)。

我GOOGLE了如何做什么,我想,它说,像我应该尝试费舍尔耶茨洗牌算法,但我不知道该怎么做,因为我的数组包含UIViews。任何解决方案?

arrays swift view shuffle
2个回答
2
投票

我会避免,可以很容易,因为它只会为你复杂的事情来计算保持状态:

@IBAction func addMessageViewButton(_ sender: Any) { 
    let hiddenViews = messageArray.filter { $0.isHidden }
    guard !hiddenViews.isEmpty else {
       // hide everything if nothing else to show
       messageArray.forEach { $0.isHidden = true }
       return
    }

    // show random view
    let randomHiddenView = hiddenViews.randomElement()
    randomHiddenView.isHidden = false
}

2
投票

你听说过或试图使用本机雨燕方法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]
© www.soinside.com 2019 - 2024. All rights reserved.