나는 중학교 2학년때 포인트 가드.
var value = 0
assert(value == 0)
value = 2
assert(value == 0, "값이 0 아닙니다.") //error
특정 조건을 체크하고 조건이 성립되지 않으면 에러를 발생시키는 함수이기 떄문에 첫번째 value는 통과했고 두번째 2로 바꿨을 땐 성립하지 않아 통과하지 못했다. assert문은 이런식으로 디버깅 모드에서 활용할 수 있다.
함수안에서 사용하기 위해 만들어졌다고 보면 되고 보통 잘못된 값이 함수에 들어오는 상황을 방어하기 위해 사용한다.
guard 조건 else {
// 조건이 false이면 else 구문이 실행되고
return or throw or break를 통해 이 후 코드를 실행하지 않도록 한다.
}
아래와 같이 value가 0이 아니라면 return 하는 함수를 작성해봤다.
func guardTest(value: Int) {
guard value == 0 else { return }
print("안녕하세요")
}
guardTest 함수에 2를 넣으면 guard 문에 막혀 return을 해서 아무런 일도 일어나지 않는다.
guardTest(value: 2)
// ???
하지만 조건에 맞게 guardTest에 0
을 넣는다면 제대로 print 값이 나온다.
guardTest(value: 0)
// 안녕하세요
예전에 했던 if / let으로 옵셔널 바이딩과 다르게 guard문은 조건문 밖에서도 사용이 가능하다.
func guardTest(value: Int?) {
guard let value = value else { return }
print(value)
}
guardTest(value: 2) // 2
guardTest(value: nil) // 아무일도 일어나지 않는다.