LoginSignup
5
1

More than 5 years have passed since last update.

Swiftのenumはswitchで条件分岐することにした

Last updated at Posted at 2017-09-13

switch文が好きではなく使うのを避け、if文を使っていた。しかし、Swiftのenumはswitch文で分岐したほうが良いと思った。enumの宣言値が増えた時にswitch〜caseで拾い漏れしているとコンパイラが検出してくれるからだ。

var operation: Operation = .new

func testSwitch() {
    switch operation {
    case .new:
        doSomething()
    case .create:
        doSomething()
    case .edit:
        doSomething()
    // case .update:
    //    doSomething()
    }
}

上記はupdateがないとdefaultを入れたほうが良いのでは?とコンパイルエラーになる。defaultを意図的に使わないようにすると、enumに新たな定義が追加された時、条件分岐漏れがあることを検出できるて良さそうだ。

ちなみにkotlinは同様のコードでコンパイルエラーにはならなかった。switchではなくwhenですが。

enum class Operation {
    NEW, CREATE, EDIT, UODATE
}

var operation: Operation = Operation.NEW
fun testSwitch() {
    when (operation) {
        Operation.NEW -> doSomething()
        Operation.CREATE -> doSomething()
        Operation.EDIT -> doSomething()
//        Operation.UODATE -> doSomething()
    }
}

でも見た目もスッキリするしいいかなと思う。処理が複数行ある時もきれいだ。

enum class Operation {
    NEW, CREATE, EDIT, UODATE
}

var operation: Operation = Operation.NEW
fun testSwitch() {
    when (operation) {
fun testSwitch2() {
    when (operation) {
        Operation.NEW -> {
            doSomething()
            doSomething()
            doSomething()
        }
    }
}

今さらだけど、私が嫌っていたのはswitch文ではなく、C言語のswitch文中に必要なbreakだったと気がついた・・・

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1