[Swift]Switch문 Trick
18 October 2015
IF Case 문
Swift 2에서는 Switch문이 아닌 if문에서도 case를 사용할 수 있습니다.
enum Direction {
case Right, Down, Left, Up
}
let r = Direction.Right
let l = Direction.Left
if case Direction.Right = r {
print("Right")
}
// Or
if case .Right = r {
print("Right")
}
if case Direction.Right = r where l == Direction.Left {
print("Right and Left")
}
Case에 함수 사용하기
기본적으로 Swift에서는 Case에 함수를 사용할 수 없습니다. 다음과 같이 코드를 작성하면 에러가 발생합니다.
var x = 0
func isEven(n: Int) -> Bool {
return n % 2 == 0 ? true : false
}
func isOdd(n: Int) -> Bool {
return n % 2 != 0 ? true : false
}
switch x {
case isEven: print("Even")
case isOdd: print("Odd")
default: print("Odd")
}
error: binary operator '~=' cannot be applied to operands of type '(Int) -> Bool' and 'Int'
case isEven: print("Even")
^~~~~~
위와 같은 에러가 발생을 하여 Case에 함수를 사용할 수 없습니다. 하지만 에러를 살펴보면 (Int) -> Bool
타입의 변수와, Int
타입의 변수가 들어감을 알 수 있으므로, 다음과 같이 ~=
연산자를 선언할 수 있습니다.
func ~=(f: Int -> Bool, value: Int) -> Bool {
return f(value)
}
제네릭을 사용하여 다른 타입도 사용할 수 있도록 작성합니다.
func ~=<T>(f: T -> Bool, value: T) -> Bool {
return f(value)
}
그리고 Case에 함수를 사용하게 되면 Switch문은 모든 경우를 판단할 수 없기 때문에 반드시 default를 사용해야 합니다.