Programming/Swift

[Swift] Switch 표현식

devssun 2018. 10. 20. 23:14
728x90
반응형

// 아론 힐리가스의 iOS 프로그래밍 5판

// 2장 Swift 언어

// 열거형과 Switch문


몇달 전 회사 개발 서적으로 이 책을 신청했는데 계속 못보고.. 이제서야 집에 가져와서 보고있다.



// enum문 예제

enum FruitType {

case Apple

case Banana

case Orange

}


// Switch문 예제

let favoriteFruit = FruitType.Apple        // favoriteFruit의 Type : FruitType

let name: String

switch favoriteFruit {

case .Apple:

name = "Apple"

case .Banana:

name = "Banana"

case .Orange:

name = "Orange"

}


// name = "Apple"


위 구문에서 favoriteFruit에 FuitType.Apple 로 지정하여 해당 변수의 타입은 위에서 정의한 FruitType(enum) 형이다.

favoriteFruit에 Apple을 지정하였으므로 case Apple에서 처리가 되어 name의 값은 Apple이 된다.


C언어의 switch문과 Swift에서 switch문의 차이는 일치하는 코드만 실행된다는 것이다.

그래서 C언어에서는 일치하는 코드를 찾아도 모든 case를 확인하기 때문에 각 case마다 break 문을 추가하는데

Swift에서는 그렇게 작동하지 않아 break문이 필요없다.

나는 그것도 모르고 매 case에 열심히 break를 적어주었다. 물론 break를 적었다고 해서 문제가 발생하지는 않는다.


만일 C언어와 같은 동작을 하게 하고 싶다면 fallthrough 키워드를 사용할 수 있다.




// 열거형과 원시값

Swift의 enum은 case에 연관된 원시 값을 갖는다. 아래 예제에서는 Int로 지정하여 위에서 부터 0, 1, 2 값을 가진다.

Int형으로 지정할 때 rawValue를 정하지 않으면 순서대로 증가 값이 들어간다.


타입이 명시된 enum을 가지고 rawValue를 사용하여 FoodType의 인스턴스를 요청하고 그 값으로 enum 타입을 초기화할 수 있다.

enum의 실제 case에 상응하는 원시 값이 없을 수 있기 때문에 옵셔널을 반환하여 이런 경우 옵셔널 바인딩을 사용한다.


아래 경우에서는 FoodType.Hamburger.rawValue를 주었으므로 foodRawValue에는 1 값이 들어가고 유효한 값이기 때문에 Hamburger case문을 처리하게 된다.


개인적으로 enum + switch문의 결합을 사용하는 경우는 처리해야할 case가 많을 때, 혹은 여러 파일/기능에서 동일한 case를 처리할 때 사용한다.

case를 일일이 Int / String 등 사용할 타입으로 지정하게 되면 철자, 데이터의 오류가 발생할 수 있고 

나도 모르게 case를 누락하는 경우가 있을 수 있어 결합하여 사용하면 enum안에 들어가는 case를 모두 필수로 넣어주어야 하기 때문에 누락하는 것을 방지하게 된다.




더 많은 Swift 문법은 공식 사이트에서 지원하고 있다.


https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html

반응형