switch 는 암시적인 진행을 사용하지 않는다! (No Implicit Fallthrough)
Swift 에서는 break 를 적지 않아도, 특정 case 가 완료되면 자동으로 switch 구문을 빠져 나오게 된다.
이런 사용법으로 인해 실수로 break 를 적지않아 의도하지 않은 case 문이 실행되는 것을 방지한다.
break 가 Swift에서 필수는 아니지만, case 안에 특정 지점에서 멈추도록 하기 위해 break 를 사용할 수 있다.
switch 문의 특징
1. case 안에는 최소 하나의 실행 구문이 있어야 한다.
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a": // Invalid, case문에 body가 없으므로 에러가 발생합니다.
case "A":
print("The letter A")
default:
print("Not the letter A")
}
// 컴파일 에러 발생!
2. case 안에 콤마(,) 로 구분하여 복수의 case 조건을 혼합하여 사용할 수 있다.
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A":
print("The letter A")
default:
print("Not the letter A")
}
// Prints "The letter A"
3. 숫자의 특정 범위를 조건으로 사용할 수 있다.
let approximateCount = 62
let countedThings = "moons orbiting Saturn"
let naturalCount: String
switch approximateCount {
case 0:
naturalCount = "no"
case 1..<5:
naturalCount = "a few"
case 5..<12:
naturalCount = "several"
case 12..<100:
naturalCount = "dozens of"
case 100..<1000:
naturalCount = "hundreds of"
default:
naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
// Prints "There are dozens of moons orbiting Saturn."
4. 튜플을 조건으로 사용할 수 있다.
let somePoint = (1, 1)
switch somePoint {
case (0,0):
print()
case (_,0):
print()
case (0, _):
print()
case (-2...3, -2...2):
print()
default:
print()
}
5. 값 바인딩
let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
print("on the x-axis with an x value of \(x)")
case (0, let y):
print("on the y-axis with a y value of \(y)")
case let (x, y):
print("somewhere else at (\(x), \(y))")
}
// Prints "on the x-axis with an x value of 2"
6. where 문 사용
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
print("(\(x), \(y)) is just some arbitrary point")
}
// Prints "(1, -1) is on the line x == -y"
7. case 에 콤마(,) 로 구분하여 여러 조건을 혼합해 사용할 수 있다.
let someCharacter: Character = "e"
switch someCharacter {
case "a", "e", "i", "o", "u":
print("\(someCharacter) is a vowel")
case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
print("\(someCharacter) is a consonant")
default:
print("\(someCharacter) is not a vowel or a consonant")
}
// Prints "e is a vowel"
8. enum 을 통해 분기 처리한 후, 분기별 반환 값을 switch 로 처리할 수 있다.
enum IndexType {
case unbrella
case mask
case laundry
case outer
case car
case temperatureGap
var totalIndexStep: Int {
switch self {
case .unbrella: return 5
case .mask: return 4
case .laundry: return 4
case .outer: return 5
case .car: return 4
case .temperatureGap: return 5
}
}
}
' iOS > 문법' 카테고리의 다른 글
배열 구조체는 언제 메모리 할당될까? (선언 시 vs 초기화 시) (0) | 2022.09.15 |
---|---|
guard 와 if , 언제 사용해야 할까? (0) | 2022.09.15 |
콜렉션 타입(Collection Type) - 배열, Set, Dictionary (0) | 2022.09.05 |
문자열과 문자(Strings & Characters) (0) | 2022.09.05 |
기본 연산자(Basic Operators) (0) | 2022.09.05 |