Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 72410
- 프로그래머스
- 스위프트
- 약타입
- lineending
- beforePopState
- textinput
- replacingOccurrences
- ReactNative
- 옵셔널
- next.js
- multiline
- JavaScript
- 약타입언어
- 동적언어
- 17681
- reactnavigation
- 중첩함수
- client-side-rendering
- switch구문
- 함수형프로그래밍
- Server-Side-Rendering
- 데이터타입함수
- reactnative android
- 리액트네이티브
- 비반환함수
- ios
- DelayInput
- SWIFT
- 나를부르는숲
Archives
- Today
- Total
으니의 개발로그
[Swift] 조건문(2) - switch 구문 본문
[Swift] 조건문(2) - switch 구문
이 글은 Swift 프로그래밍 책을 읽고 요약한 내용입니다.
break
키워드는 선택 사항이다.case
내부의 코드를 모두 실행하면break
없이도switch
문이 종료되기 때문에break
를 쓰지 않고case
를 연속 실행하던 트릭을 사용하지 못한다.- 스위프트에서
switch
구문의case
를 연속 실행하려면fallthrough
키워드를 사용해야 한다.
switch
구문의 조건에 다양한 값이 들어갈 수 있으나 각case
에 들어갈 비교 값은 입력 값과 데이터 타입이 같아야 한다.- 비교될 값이 명확히 한정적인 값(열거형 값 등)이 아닐 때는
default
를 꼭 작성해줘야 한다. case
에서는 범위 연산자를 사용할 수도 있고where
절을 사용하여 조건을 확장할 수도 있다.
switch 입력 값 {
case 비교 값 1:
실행 구문
case 비교 값 2:
실행 구문
// 이번 case를 마치고 switch 구문을 탈출하지 않는다. 아래 case로 넘어간다.
fallthrough
case 비교 값 3, 비교 값 4, 비교 값 5: // 한 번에 여러 값을 비교할 수 있다.
실행 구문
break // break 키워드를 통한 종료는 선택 사항이다.
default: // 한정된 범위가 명확하지 않다면 default는 필수이다.
실행 구문
}
-
switch 구문 기본 구현
let integerValue: Int = 5 switch integerValue { case 0: print("Value == zero") case 1...10: print("Value == 1~10") fallthrough case Int.min..<0, 101..<Int.max: print("Value < 0 or Value > 100") break default: print("10 < Value <= 100") } /* Value == 1~10 */ /* Value < 0 or Value > 100 */
-
부동소수 타입의 범위 연산을 통한 switch case 구성
import UIKit let doubleValue: Double = 3.0 switch doubleValue { case 0: print("Value == zero") case 1.5...10.5: print("1.5 <= Value <= 10.5") default: print("Value == \(doubleValue)") } /* 1.5 <= Value <= 10.5 */
-
문자열 switch case 구성
import UIKit let stringValue: String = "Liam Neeson" switch stringValue { case "yagom": print("He is yagom") case "Jay": print("He is Jay") case "Jenny", "Joker", "Nova": print("He or She is \(stringValue)") default: print("\(stringValue) said 'I don't know who you are'") } /* Liam Neeson said 'I don't know who you are' */
-
잘못된 case 사용
import UIKit let stringValue: String = "Liam Neeson" switch stringValue { case "yagom": print("He is yagom") case "Jay": print("He is Jay") case "Jenny": // stringValue가 "Jenny"에 해당할 때 실행될 코드가 와야함 // 비어있으므로 오류 발생 case "Joker": // stringValue가 "Joker"에 해당할 때 실행될 코드가 와야함 // 비어있으므로 오류 발생! case "Nova": print("He or She is \(stringValue)") default: print("\(stringValue) said 'I don't know who you are'") }
-
fallthrough의 사용
import UIKit let stringValue: String = "Joker" switch stringValue { case "yagom": print("He is yagom") case "Jay": print("He is Jay") case "Jenny": fallthrough case "Joker": fallthrough case "Nova": print("He or She is \(stringValue)") default: print("\(stringValue) said 'I don't know who you are.'") } /* He or She is Joker */
-
와일드카드 식별자를 사용한 튜플 switch case 구성
typealias NameAge = (name: String, age: Int) let tupleValue: NameAge = ("yagom", 99) switch tupleValue { case ("yagom", 50): print("정확히 맞췄습니다!") case ("yagom", _): print("이름만 맞았습니다. 나이는 \(tupleValue.age)입니다.") case (_, 99): print("나이만 맞았습니다. 이름은 \(tupleValue.name)입니다.") default: print("누굴 찾나요?") } /* 이름만 맞았습니다. 나이는 99입니다. */
-
값 바인딩을 사용한 튜플 switch case 구성
typealias NameAge = (name: String, age: Int) let tupleValue: NameAge = ("yagom", 99) switch tupleValue { case ("yagom", 50): print("정확히 맞췄습니다!") case ("yagom", let age): print("이름만 맞았습니다. 나이는 \(age)입니다.") case (let name, 99): print("나이만 맞았습니다. 이름은 \(name)입니다.") default: print("누굴 찾나요?") } /* 이름만 맞았습니다. 나이는 99입니다. */
-
where를 사용한 switch case 확장
let 직급: String = "사원" let 연차: Int = 1 let 인턴인가: Bool = false switch 직급 { case "사원" where 인턴인가 == true: print("인턴입니다") case "사원" where 연차 < 2 && 인턴인가 == false: print("신입사원입니다.") case "사원" where 연차 > 5: print("연식 좀 된 사원입니다.") case "사원": print("사원입니다.") case "대리": print("대리입니다") default: print("사장입니까?") } /* 신입사원입니다. */
-
열거형을 입력 값으로 받는 switch 구문
enum School { case primary, elementary, middle, high, college, university, graduate } let 최종학력: School = School.university switch 최종학력 { case .primary: print("최종학력을 유치원입니다.") case .elementary: print("최종학력을 초등학교입니다.") case .middle: print("최종학력을 중학교입니다.") case .high: print("최종학력을 고등학교입니다.") case .college, .university: print("최종학력을 대학(교)입니다.") case .graduate: print("최종학력을 대학원입니다.") } /* 최종학력을 대학(교)입니다. */
-
Menu 열거형의 모든 case를 처리하는 switch 구문의 상태
enum Menu { case chicken case pizza } let lunchMenu: Menu = .chicken switch lunchMenu { case .chicken: print("반반 무많이") case .pizza: print("핫소스 많이 주세요") case _: // case default: 와 같은 표현이다 print("오늘 메뉴가 뭐죠?") } /* 반반 무많이 */
-
차후에 Menu 열거형에 추가한 case를 처리하지 않으면 경고를 내어줄 unknown 속성
enum Menu { case chicken case pizza case hamburger } let lunchMenu: Menu = .chicken switch lunchMenu { case .chicken: print("반반 무많이") case .pizza: print("핫소스 많이 주세요") @unknown case _: print("오늘 메뉴가 뭐죠?") } /* 반반 무많이 */
'Swift > 책 정리' 카테고리의 다른 글
[Swift] 반복문(2) - while, repeat-while 구문 (0) | 2021.01.24 |
---|---|
[Swift] 반복문(1) - for-in 구문 (0) | 2021.01.23 |
[Swift] 조건문(1) - if 구문 (0) | 2021.01.20 |
[Swift] 연산자(1) - 연산자의 종류 (0) | 2021.01.19 |
[Swift] 데이터 타입 고급(3) - 열거형 (0) | 2021.01.12 |