for, while 과 마찬가지로 중괄호로 코드 블럭 구문. 조건식에 괄호는 쓰지 않음.
0, nil 등을 false 대신 쓸 수 없음.
var a = 10
if a < 5 {
print(123) // 실행되지 않음
}
else if 형태를 사용.
else 블록이 필수. 표현식의 결과가 참일 때 실행되는 블록이 없음. else 블록만 존재
주로 후속 코드들이 실행되기 전에 특정 조건을 만족하는지 확인하는 용도로 사용(guard). 조건이 만족되지 않은 채로 진행하면 심각한 오류가 발생할 시 조기 종료하기 위한 목적.
=> 블럭 내에는 이후의 코드 진행을 막아주는 구문이 반드시 포함되어야 함. break
return
func devide(base: Int) {
guard base != 0 else {
print("연산 불가")
return // 필수
}
print(100 / base)
}
devide(base: 0) // guard 구문으로 빠짐
if 로 예외 처리할 때와 조건식이 반대임.
OS 버전별로 구문을 분리할 때 사용.
코드 실행 중인 기기의 OS 를 판단해 boolean 을 반환하므로 guard
나 if
문의 조건에 넣어 사용하면 된다.
// #available(플랫폼 버전, 플랫폼 버전, *) 이런 형식으로 사용, 플랫폼과 버전은 공백으로 구분, 마지막엔 * 로 입력 끝 명시.
if #available(iOS 9, OSX 10.10, watchOS 1, *) { // 상수로 입력되므로 쿼우팅 X
해당 OS 에 맞는 구문
} else {
실패 처리
}
case
로 케이스 구분.
** 자바와 다르게 case hit 시 아래 조건 비교하지 않고 switch문 탈출. 맨 처음 만나는 hit case 만 확인한다. -> break 생략 가능
모든 패턴을 매칭시킬 수 있는 경우 제외, default case 는 필수.
let val = 2
switch val {
case 1 :
print(1)
case 2 :
print(2)
case 3 :
print(3)
default : // hit 못할시
print(-1)
}
fallthrough
case 진입 시 가장 인접한 한 실행 구문 hit 여부 관계없이 실행
let a = 5
switch a{
case 1 :
print(1)
case 2:
print(2)
case 3:
print(3)
fallthrough // hit X
case 4:
print(4)
case 5: // hit
print(5)
fallthrough // 작동
case 6:
print(6) // 여기까지 실행
case 7, 8:
print( // 여기부터는 X
default:
print(123)
}
이런것도 가능
var value = (2, 3)
switch value{
case let (x, 3): // hit. x 선언 위해 let 사용
print(x) // 2
default:
print("Nope")
}
//
var a = 1
switch a {
case let x:
print(x)
}
// 이 경우는 모든 패턴 잡기 때문에 default 필요 x
범위 케이스 처리도 가능
var passtime = 2000
switch passtime {
case 1..<100:
print("방금")
case 100..<1000":
print("조금 전")
default
print("예전")
}
////
var tuple = (2, 3)
switch tuple{
case (0...3, 5...6):
print("A")
case (0...2, 0...3): // hit
print("B")
default:
print("X")
}
한 블럭씩만 탈출. 이중포문 한번에 탈출하지 않음.
레이블 붙일 수 있음.
outer : for i in 1...5 {
inner : for j in 1...5 {
if j == 3{
break inner
}
if i == 4{
break outer
}
print(i, j)
}
}
1 1
1 2
2 1
2 2
3 1
3 2