首页 > 解决方案 > 代码重构 - Swift

问题描述

我认为我关于按钮的代码违反了 DRY 原则。你能建议一种更有效的方法来减少混乱吗?

@IBAction func competitiveButton(_ sender: Any) {
    if competitiveMatch.isEnabled == true {
        competitiveMatch.isEnabled = false
        friendlyMatch.isEnabled = true
        tournamentButton.isEnabled = true
        trainingButton.isEnabled = true
    } else {
        competitiveMatch.isEnabled = true
    }
}


@IBAction func friendlyButton(_ sender: Any) {
    if friendlyMatch.isEnabled == true {
        friendlyMatch.isEnabled = false
        tournamentButton.isEnabled = true
        competitiveMatch.isEnabled = true
        trainingButton.isEnabled = true
    } else {
        friendlyMatch.isEnabled = true
    }
}


@IBAction func tourneyButton(_ sender: Any) {
    if tournamentButton.isEnabled == true {
        tournamentButton.isEnabled = false
        friendlyMatch.isEnabled = true
        trainingButton.isEnabled = true
        competitiveMatch.isEnabled = true
    } else {
        tournamentButton.isEnabled = true
    }
}


@IBAction func trainingButton(_ sender: Any) {
    if trainingButton.isEnabled == true {
        trainingButton.isEnabled = false
        friendlyMatch.isEnabled = true
        tournamentButton.isEnabled = true
        competitiveMatch.isEnabled = true
    } else {
        trainingButton.isEnabled = true
    }
}

代码遵循所有四个按钮的设置模式。我无法考虑使用更短的方法来做同样的事情。请帮忙。完整的初学者在这里。

标签: swiftxcode

解决方案


您可以使用单个IBAction而不是 4 个单独的方法。并使发件人类型为UIButtonfrom Any。然后你可以做类似的事情

@IBAction func toggleEnableDisable(_ sender: UIButton) {
    let currentValue = sender.isEnabled
    let buttonArray = [trainingButton, friendlyMatch, tournamentButton, competitiveMatch]
    buttonArray.forEach { $0.isEnabled = false }
    sender.isEnabled = !currentValue
}

推荐阅读