Skip to content

Latest commit

 

History

History
45 lines (39 loc) · 1.81 KB

2020_11_19.md

File metadata and controls

45 lines (39 loc) · 1.81 KB

TIL (Today I Learned)

11월 19일 (목)

제가 이해한 대로 작성한 내용이다 보니, 정확한 정보가 아닐 수 있습니다.
고쳐야 할 부분이 있다면, 편하게 얘기해 주시면 감사하겠습니다.🙏🏻


if vs guard

// if
func greetingWithIf() {
    let value: String? = "lina"
    type(of: value) // Optional<String>
    if let name = value {
        print("hello, \(name)")
        type(of: name) // String
    }
//    type(of: name) // 컴파일에러
}

// guard
func greetingWithGuard() {
    let value: String? = "lina"
    type(of: value) // Optional<String>
    guard let name = value else {
        return
    }
    print("hello, \(name)")
    type(of: name) // String
}
  1. if와 달리 guard는 항상 else 문이 존재함.
  2. if로 옵셔널 바인딩 된 상수는 그 블럭 안에서만 사용 가능, guard는 전체에서 사용 가능.
  3. if가 false일 경우는 if의 코드블럭만 지나치고 계속 실행되지만, guard는 제어문 전환 명령어 등으로 보통 코드가 종료됨.

docs.swift에서 guard가 early Exit로 나옴.
if는 조건에 맞는 코드를 실행하거나, 조건이 안맞으면 지나가는 느낌이고
guard는 조건에 맞지 않을 때, 더 이상 코드를 진행하지않고 거기서 종료하라는 느낌이 강한 것 같다.
예외사항을 처리하기에 guard가 더 좋아 보이지만, return,break 등 제어문 전환 명령어를 쓸 수 없으면 사용이 불가능 하다.

참고문헌

https://velog.io/@dev-lena/guard-let%EA%B3%BC-if-let%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90 // if vs guard https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID127 // if vs guard

다음 TIL 보기