이 게시글은 독자가 어느정도 프로그래밍을 알고 있다 가정하고 작성되었다.
if
스위프트의 if문은 들어갈 조건에 소괄호를 생략할 수 있다.
let a: Int = 20
let b: Int = 20
if a == b {
print("서로 같은 수")
}
else if (a > b) {
print("a가 더 큼")
}
else {
print("b가 더 큼")
}
스위프트에서 조건으로 들어가는 구문은 반드시 Bool 자료형이 들어가야만 한다.
let a: Int = 1
if a {
print("a는 Bool이 아닌 Int이므로 컴파일 에러가 발생한다.")
}
switch
스위프트에서 스위치 사용은 꽤 자유롭다.
let s: String = "Kim"
switch s {
case "Park":
print("정수 뿐만 아니라 다양한 자료형을 사용할 수 있다.")
case "Kim":
print("스위프트는 맞는 케이스에 도달하면 알아서 break 된다.")
print("만약 다른 언어처럼 케이스를 계속 진행시키길 원한다면")
print("해당 케이스 맨 아래 키워드 fallthrough를 넣어줘야 한다.")
fallthrough
default:
print("Not found")
}
스위프트는 break를 넣지 않더라도 조건에 만족되면 코드를 실행한 뒤 스위치문을 빠져나오며 명확하게 표현하길 원하면 break를 따로 넣어도 무방하다.
fallthrough 키워드를 이용하여 case를 계속 검사할지 정할 수 있다.
단일 변수 뿐만 아니라 여러 변수를 넣거나 범위를 지정하는 것도 가능하다.
let score: Int = 50
switch score {
case 0:
print("Zero")
case 1...95:
print("Higher than 0 and lower than 96")
case 96, 97, 98, 99:
print("Higher than 95 and lower than 100")
case 100:
print("One hundred")
default:
print("The score is lower than 0 or higher than 100")
}
1...99는 1부터 99까지의 정수를 나타낸 것이다. 이에 대해선 나중에 반복문을 다룰 때 자세히 설명한다.
각 case는 반드시 실행 코드를 가지고 있어야 함
어떤 스위치 구문에 아무 코드가 없다면 컴파일 에러를 발생시킨다.
switch "test" {
case "test": // test 케이스에서 실행 코드가 없어 컴파일 에러가 발생한다.
default:
print("No test")
}
튜플과 와일드 카드(_)
스위프트도 튜플이 있는데 튜플로 스위치를 돌릴 경우 언더스코어를 사용하여 어떤 값을 무시하고 검사를 하게 할 수 있다.
let profile: (name: String, age: Int) = (name: "Park", age: 34)
switch profile {
case (_, 34):
print("나이가 동일합니다.")
fallthrough
case ("Park", _):
print("이름이 동일합니다.")
fallthrough
case ("Park", 34):
print("모든 정보가 동일합니다.")
default:
print("모든 정보가 동일하지 않습니다.")
}
스위프트의 switch는 모든 경우에 대한 대비가 되어 있어야 함
다음 코드는 컴파일 에러를 일으킨다.
let test: Int = 19;
switch test {
case 19:
print("190")
}
이런 식의 스위치문을 작성하고 컴파일을 시도할 시 switch must be exhaustive라는 오류가 뜨는데 이는 스위치를 사용할 때 모든 케이스에 대한 동작이 있어야 한다는 것이다.
케이스의 마지막으로 default 를 넣을 것이 강제된다. default 말고도 언더스코어로 표현을 대체할 수 있다.
복잡한 경우에 대한 처리
스위치에서 default를 넣을 경우 해당 스위치에서 어떤 데이터를 처리하느냐에 따라 Case will never be executed라는 경고를 보여줄 때도 있는데 이를 엄격하게 하기 위해 @unknown 키워드를 사용할 수 있다.
let test: Int = 19;
switch test {
case 19:
print("190")
@unknown case _:
print("what")
}
이렇게 default 앞에 붙여 경고 대신 switch must be exhaustive 에러를 일으키도록 할 수 있다.
복잡한 개체를 스위치로 다룰 때 처리하지 않은 케이스를 코더에게 알려주는 용도로 이용할 수 있다.
'Swift 스위프트' 카테고리의 다른 글
스위프트(Swift) 5 - 기본 출력과 변수 (0) | 2021.02.10 |
---|---|
우분투에서 스위프트 환경 구성하기 (0) | 2021.02.09 |