enumを使って難易度を管理するサンプルコードです。
次の難易度があるかないかで変更ボタンを表示/非表示切り替えます。
enumInt型のrawValueで管理した方が変更がしやすい。
但し、全てswitch地獄に陥りやすいので、
・case間を行き来したいか
・条件を網羅させたいか
・別カテゴリが含まれていないか
などを意識して使う必要がある。
必要に応じてenumではなくprotocolとstructを組み合わせたものを使う。
import UIKit
class ViewController: UIViewController {
private var mode = Mode.Normal
@IBOutlet weak var modeLabel: UILabel!
@IBOutlet weak var nextModeButton: UIButton!
@IBOutlet weak var previousModeButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
modeLabel.text = mode.returnTitle()
}
@IBAction func didTapNextModeButton(_ sender: Any) {
mode = mode.nextMode() ?? mode
modeLabel.text = mode.returnTitle()
nextModeButton.isHidden = mode.nextMode() == nil
previousModeButton.isHidden = mode.previousMode() == nil
}
@IBAction func didTapPreviousModeButton(_ sender: Any) {
mode = mode.previousMode() ?? mode
modeLabel.text = mode.returnTitle()
nextModeButton.isHidden = mode.nextMode() == nil
previousModeButton.isHidden = mode.previousMode() == nil
}
}
enum Mode : Int{
//難易度を3つ用意
case Easy
case Normal
case Hard
func nextMode() -> Mode?{
Mode(rawValue: self.rawValue + 1)
}
func previousMode() -> Mode?{
Mode(rawValue: self.rawValue - 1)
}
//難易度毎のタイトルを返す
func returnTitle() -> String {
switch self {
case .Easy:
return "Easy"
case .Normal:
return "Normal"
case .Hard:
return "Hard"
}
}
}