我正在尝试构建一个具有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。有解决办法吗?
答案 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}}