"Boldness has genius, power, and magic in it." - Johann Wolfgang von Goethe

iOS_Dev

[Swift] Assert와 Guard 사용법 정리

Toproot 2022. 9. 27. 21:21
728x90
728x90

image

학습내용

  • 디버깅 중에 조건을 검증해주는 Assert
  • if문과 유사하게 조건을 걸어주는 Guard

🔐 Assert와 Guard는 무엇인가

Swift의 특별한 기본함수라고 할 수 있는 Assert와 Guard는 이름만 들으면 낯설게 느껴집니다.
하지만 잘 사용 하면 개발자에게 정말 유용한 도구이고,
좀 더 다양해진 If문(?) 처럼 느껴지기도 합니다.

Assert

Assert는 특정 조건을 체크하고, 해당 조건이 성립되지 않으면 error 메세지를 띄워 줍니다.
디버깅 모드에서만 동작하며, 주로 디버깅 중 조건의 검증을 위해 사용합니다.
조건이 성립되지 않을 때, Terminal 에서 runtime error를 발생시키고,
작성했던 메세지를 나타내주어 어느 부분에서 에러가 났는 지 찾기 쉽게 도와줍니다.

value의 값을 검증하고, 성립되지 않으면 error 메세지 출력

import Foundation


// assert 는 디버깅 중 조건의 검증을 위해 사용
var value = 0
assert(value == 0)

value = 2
assert(value == 0, "값이 0이 아닙니다.") // Fail -> 메세지와 함께, runtime error
// __lldb_expr_1/16.Assert_Guard.xcplaygroundpage:9: Assertion failed: 값이 0이 아닙니다.

Guard

Guard는 어떤 함수 속에서 특정 조건을 검사하여 그 다음에 오는 코드의 실행여부를 결정해 줍니다.
if 문과 비슷하지만, 기본적으로 조건이 거짓일 때 else문이 작동하여 return을 반환합니다.

/*
 guard 조건 else {
    // 조건이 false 이면 else 구문이 실행되고
    return or throw or break를 통해 이 후 코드를 실행하지 않도록 한다.
 }
 */
func guardTest(value: Int) {
    guard value == 0 else { return }
    print("안녕하세요")
}

guardTest(value: 0)
// 안녕하세요

Optional Binding이 가능한 Guard문

  • guard문을 활용해 Optional을 조건문 범위 밖에서도 사용할 수 있음.
func guardTest(value: Int?) { // Int? -> Optional Binding
    guard let value = value else { return }
    print(value)
}

guardTest(value: 2)
guardTest(value: nil)
728x90
728x90