可用于 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

它可能需要一些调整,因为它完全未经测试。