这是我的代码:
func deneme() {
var buttons: [UIButton] = [buttonA,buttonB,buttonC,buttonD,buttonE]
let randomNumber = Int(arc4random_uniform(UInt32(buttons.count)))
let button = buttons.remove(at: randomNumber)
if button.titleLabel?.text == cevapLabel.text {
}
else {
button.isHidden = true
}
}
我想在if语句中使用这些代码。如果swift有goto,我可以编写如下代码:
var buttons: [UIButton] = [buttonA,buttonB,buttonC,buttonD,buttonE]
A:
let randomNumber = Int(arc4random_uniform(UInt32(buttons.count)))
let button = buttons.remove(at: randomNumber)
if button.titleLabel?.text == cevapLabel.text {
goto A
}
else {
button.isHidden = true
}
代码的目的:隐藏按钮。如果数组中按钮的文本等于cevapLabel.text,则应重新启动随机代码。
答案 0 :(得分:2)
您可以使用repeat-while
:
var buttons: [UIButton] = [buttonA,buttonB,buttonC,buttonD,buttonE]
var currentButton: UIButton?
repeat {
let randomNumber = Int(arc4random_uniform(UInt32(buttons.count)))
currentButton = buttons.remove(at: randomNumber)
} while currentButton?.titleLabel?.text == cevapLabel.text
currentButton?.isHidden = true
答案 1 :(得分:0)
除了repeat-while
Milan's solution之外,您还可以通过实现函数递归来实现它,我们假设您的函数应该命名为showOrHide()
:
var buttons: [UIButton] = [buttonA,buttonB,buttonC,buttonD,buttonE]
showOrHide()
func showOrHide() {
let randomNumber = Int(arc4random_uniform(UInt32(buttons.count)))
let button = buttons.remove(at: randomNumber)
if button.titleLabel?.text == cevapLabel.text {
showOrHide()
}
else {
button.isHidden = true
}
}
答案 2 :(得分:0)
这是一个功能版本。第一行获取没有cevapLabel.text
作为标签的所有按钮的索引。然后,从结果数组中选择一个索引,并删除包含该索引的项目。
let eligibleIndexes = buttons.enumerated()
.filter{ $0.1.titleLabel?.text ?? "" != cevapLabel.text }
.map{ $0.0 }
let indexToGo = eligibleIndexes[Int(arc4random_uniform(UInt32(eligibleIndexes.count)))]
let CurrentButton = buttons.remove(at: indexToGo)
currentButton.isHidden = true
可能需要进行一些调整,因为它完全未经测试。