可用于 goto swift 的其他替代方法
Other alternatives that can be used for goto swift
这是我的代码:
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,随机代码应该重新开始。
您可以使用 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
除了repeat-while
之外,您还可以通过实现函数递归来实现它,假设您的函数应命名为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
}
}
这是一个功能版本。第一行获取所有没有 cevapLabel.text
作为标签的按钮的索引。然后从结果数组中选择一个索引并删除具有该索引的项目。
let eligibleIndexes = buttons.enumerated()
.filter{ [=10=].1.titleLabel?.text ?? "" != cevapLabel.text }
.map{ [=10=].0 }
let indexToGo = eligibleIndexes[Int(arc4random_uniform(UInt32(eligibleIndexes.count)))]
let CurrentButton = buttons.remove(at: indexToGo)
currentButton.isHidden = true
它可能需要一些调整,因为它完全未经测试。
这是我的代码:
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,随机代码应该重新开始。
您可以使用 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
除了repeat-while
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
}
}
这是一个功能版本。第一行获取所有没有 cevapLabel.text
作为标签的按钮的索引。然后从结果数组中选择一个索引并删除具有该索引的项目。
let eligibleIndexes = buttons.enumerated()
.filter{ [=10=].1.titleLabel?.text ?? "" != cevapLabel.text }
.map{ [=10=].0 }
let indexToGo = eligibleIndexes[Int(arc4random_uniform(UInt32(eligibleIndexes.count)))]
let CurrentButton = buttons.remove(at: indexToGo)
currentButton.isHidden = true
它可能需要一些调整,因为它完全未经测试。