[Swift] 기본 문법3

한음·2022년 2월 28일
0
post-custom-banner

조건문

  • if
  • guard
  • switch

if

for, while 과 마찬가지로 중괄호로 코드 블럭 구문. 조건식에 괄호는 쓰지 않음.
0, nil 등을 false 대신 쓸 수 없음.

var a = 10
if a < 5 {
  print(123) // 실행되지 않음
}

else if 형태를 사용.

guard

else 블록이 필수. 표현식의 결과가 참일 때 실행되는 블록이 없음. else 블록만 존재
주로 후속 코드들이 실행되기 전에 특정 조건을 만족하는지 확인하는 용도로 사용(guard). 조건이 만족되지 않은 채로 진행하면 심각한 오류가 발생할 시 조기 종료하기 위한 목적.
=> 블럭 내에는 이후의 코드 진행을 막아주는 구문이 반드시 포함되어야 함. break return

func devide(base: Int) {
  guard base != 0 else {
    print("연산 불가")
    return // 필수
  }
  print(100 / base)
}

devide(base: 0) // guard 구문으로 빠짐

if 로 예외 처리할 때와 조건식이 반대임.

#available 구문

OS 버전별로 구문을 분리할 때 사용.
코드 실행 중인 기기의 OS 를 판단해 boolean 을 반환하므로 guardif 문의 조건에 넣어 사용하면 된다.

// #available(플랫폼 버전, 플랫폼 버전, *) 이런 형식으로 사용, 플랫폼과 버전은 공백으로 구분, 마지막엔 * 로 입력 끝 명시.

if #available(iOS 9, OSX 10.10, watchOS 1, *) { // 상수로 입력되므로 쿼우팅 X
	해당 OS 에 맞는 구문
} else {
 	실패 처리
}

switch 구문

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")
}

제어 전달문

  • break
  • continue
  • fallthrough
  • return

break

한 블럭씩만 탈출. 이중포문 한번에 탈출하지 않음.
레이블 붙일 수 있음.

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
profile
https://github.com/0hhanum
post-custom-banner

0개의 댓글