[Swift] If let과 guard let(옵셔널 바인딩)

hye0n.gyu·2023년 6월 3일

Swift BOJ

목록 보기
9/15
post-thumbnail
for i in 1...n {
    if let input = readLine() {
        let inputs = input.split(separator:" ").map{Int($0)!}
        let a:Int = inputs[0]
        let b:Int = inputs[1]
        
       w[i] = a
       p[i] = b
    }
}

If문인데 조건에 변수가 들어간 형태가 있길래 무엇인지 궁금하여 찾게되었다.

옵셔널 바인딩이란?

우리는 변수에 값이 있을지 없을지 모르는 상황에서 Optional을 사용하지만, 그 값을 안전하게 가져오려면
Optional Binding을 사용하여 값을 안전하게 Unwrap 해야 한다.

1. if let 이란?

if let은 Optional 값을 Unwrapping 하는 과정이다.

if let은 지역변수로만 사용이 가능하기 때문에 구문 밖에서 접근이 불가능하다

var n: String? =123// Optional(“123”)

    if let myN = n {
        print(myN) // "123"
    } else {    // n의 값이 nil일 경우.
        print("nil")
    }

2. guard let

guard문은 early exit이라는 특성이 있다.

early exit이란?
원하는 조건을 만족하지 않으면 이후의 코드를 실행하지 않고 종료를 시켜버림을 의미합니다.

guard문의 조건을 만족하지 않는다면 guard문이 선언된 해당 Scope를 벗어나
같은 Scope의 이후 코드를 실행하지 않습니다.

따라서 guard문의 else block은 절대 생략할 수 없으며,
else block에는 해당 Scope를 벗어나기 위한 return, continue, break, throw등의 구문이 반드시 포함되어야 합니다.

위와 같은 특성 때문에 guard문은 함수나 메소드와 같이 local scope를 갖는 곳에서 사용합니다.

func guardExample(_ testBool: Bool?) {
    guard let bool = testBool, bool else {
        print("참이 아니다.")
        return
    }
    
    print("result bool :: \(bool)")
}

if let

  1. 조건문의 Optional 값이 nil인지 확인하고 2분기로 작업할 수 있다.
  2. 지역변수로만 사용 가능하다.

guard let

  1. 조건이 true 일 때 코드가 계속 실행된다.
  2. 전역변수로 사용이 가능하다.
profile
반려묘 하루 velog

0개의 댓글