guard 옵셔널 바인딩

Swift 문법을 배울 때 새롭게 만난 아이가 guard 문이었다. 옵셔널 변수를 언래핑할 때(옵셔널 바인딩) 많이 쓰는 것 같은데, 낯설어서 그른가 if let 만 쓰게되고 그랬다..

그치만 또 예제 코드들을 찾다보면 자주 만나기도하고 언제까지 낯가릴 수는 없으니까 좀 더 자세히 알아보면서 우리 이제 그만 친해지길 바래,,

guard

  • 조건을 검사하여 이 후 코드를 실행 유무를 판단하는 구문
  • 조건이 false 일 때 구문이 실행!
    • if랑은 반대!
  • 기본 개념 예제 코드
func guardTest(value: Int) {
	guard value == 0 else { return }
	print("test")
}

guardTest(2) // 결과 없음
guardTest(0) // "test"
  • guard를 옵셔널 바인딩에서 활용하기
func guardTest(value: Int?) {
  guard let resultValue = value else { return }
  print(resultValue)
}

guardTest(resultValue: 2) // "2"
guardTest(resultValue: nil) // 결과 없음

// 똑같은 코드를 if문으로 사용한다면
func ifTest(value: Int?) {
  if let resultValue = value {
    print(resultValue)
  }
}

ifTest(value: 2)
ifTest(resultValue: nil) // 결과 없음

옵셔널 바인딩에서 guard와 if의 가장 큰 차이점이라고 한다면 if문은 if구문 내에서만 변수를 이용할 수 있는데, guard는 구문 밖에서도 이용이 가능하다.

func ifTest(value: Int?) {
  if let resultValue = value {
    print(resultValue)
  }
	print(resultValue) // error!!
}

매번 옵셔널 바인딩 한 값을 구문 밖에서 사용하려면 불가능해서 다른 전역변수를 할당했는데 이제 그럴 필요가 없다! 그동안 만들어 놓은 비효율적인 코드를 고치러 가야될듯..

끝!