본문 바로가기

Mobile/Swift

[Swift - 문법] 조건문 (if , switch)

반응형

1. if

스위프트의 if 구문은 조건의 값이 반드시 Bool 타입이어야 합니다.

let first: Int = 5
let second: Int = 7

if first > second {
    print("first > second")
} else if first < second {
    print("first < second")
} else {
    print("first = second")
}

2. switch

Swift 에서의 switch 구문 특징
- break 키워드 사용은 선택사항 입니다.
- case 내부의 코드를 모두 실행하면 break 없어도 switch 구문이 종료됩니다.
- 다른 언어에서 사용하던 break 없이 연속 실행하던 트릭을 swift에서는 사용할 수 없습니다.
- case를 연속 실행하고자 하는 경우에는 fallthrough 키워드를 사용해야 합니다.

아래 사진과 예시에서 switch 구문 활용법을 익히시기 바랍니다.

(1) 범위 연산자를 이용한 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")
}

(2) 부동소수 타입의 범위 연산을 통한 switch case 구성

let doubleValue: Double = 15.0

switch doubleValue {
case 0:
    print("Value == zero")
case 1.5...10.5:
    print("1.5 <= Value <= 10.5")
default:
    print("Value == \(doubleValue)")
}

(3) 문자열 switch case 구성

let stringValue: String = "Ironman"

switch stringValue {
case "Hulk":
    print("He is Hulk")
case "Captain":
    print("He is Captain")
case "Ironman":
    print("He is Ironman")
default:
    print("\(stringValue) said 'I don't know who you are'")
}

(4) 튜플 switch case 구성, 와일드카드 식별자(_) 사용

typealias NameAge = (name:String, age:Int)

let tupleValue: NameAge = ("Stark", 199)

switch tupleValue {
case ("Stark", 49):
    print("이름과 나이가 맞습니다.")
case (_, 49):
    print("나이만 맞았습니다.")
case ("Stark", _):
    print("이름만 맞았습니다.")
default:
    print("틀렸습니다.")
}

(5) 값 바인딩을 사용한 튜플 switch case 구성

switch tupleValue {
case ("Stark", 49):
    print("이름과 나이가 맞습니다.")
case (let name, 49):
    print("나이만 맞았습니다. 이름은 \(name)입니다.")
case ("Stark", let age):
    print("이름만 맞았습니다. 나이는 \(age)입니다.")
default:
    print("틀렸습니다.")
}

(6) where를 사용해 switch case 확장

let line: String = "Mark"
let number: Int = 1
let isItTester: Bool = false

switch line {
case "Mark" where isItTester == true:
    print("Mark의 \(number)번 시리즈의 테스트 버전입니다.")
case "Mark" where number < 2 && isItTester == false:
    print("Mark의 초기 시리즈 입니다.")
case "Mark" where number >= 2 && isItTester == false:
    print("Mark의 \(number)번 시리즈 입니다.")
case "Hulkbuster":
    print("Hulkbuster 입니다.")
case "Javis":
    print("Javis 입니다.")
default:
    print("예상되는 버전이 없습니다.")
}

(7) 열거형을 입력값으로 받는 switch 구문

enum Heroes {
    case ironman, hulk, captain, spiderman, antman, thor
}

let hero: Heroes = .thor

switch hero {
case .ironman:
    print("아이언맨 입니다.")
case .hulk:
    print("헐크 입니다.")
case .captain:
    print("캡틴 입니다.")
case .spiderman:
    print("스파이더맨 입니다.")
case .antman:
    print("앤트맨 입니다.")
// default와 같은 기능    
case _:
    print("토르 입니다.")
}

(8) case를 처리하지 않으면 경고를 보여주는 unkwon 속성

아래의 switch 구문에서 thor 에 대한 case가 없더라도 경고성 메세지를 보여주지 않습니다. 이런 상태에서 case가 추가될 경우 경고성 메세지가 나오지 않아 문제가 될 수 있습니다.

enum Heroes {
    case ironman, hulk, thor
}

let hero: Heroes = .thor

switch hero {
case .ironman:
    print("아이언맨 입니다.")
case .hulk:
    print("헐크 입니다.")
case _:
    print("기타 히어로입니다.")
}

아래 case _: 앞에 @unknown을 붙여주면 case에서 빠진 부분을 표시할 수 있습니다.

반응형