이 기사를 읽으 면서 Guard를 사용하면 큰 이점을 발견 했습니다
여기에서 guard의 사용을 예제와 비교할 수 있습니다 :
이것은 가드가없는 부분입니다.
func fooBinding(x: Int?) {
if let x = x where x > 0 {
// Do stuff with x
x.description
}
// Value requirements not met, do something
}
여기 모든 조건 내에서 원하는 코드를 넣습니다.
당신은 즉시 이것에 대한 문제를 볼 수는 없지만, 당신이 진술을 실행하기 전에 충족시켜야 할 수많은 조건에 중첩되어 있다면 어떻게 혼란 스러울 수 있는지 상상할 수 있습니다.
이를 정리하는 방법은 먼저 각 점검을 수행하고, 충족되지 않으면 종료하는 것입니다. 이것은 어떤 조건이이 기능을 종료하게되는지 쉽게 이해할 수있게합니다.
그러나 이제 가드를 사용할 수 있으며 일부 문제를 해결할 수 있음을 알 수 있습니다.
func fooGuard(x: Int?) {
guard let x = x where x > 0 else {
// Value requirements not met, do something
return
}
// Do stuff with x
x.description
}
- 원하지 않는 상태가 아닌 원하는 상태를 확인합니다. 이것은 다시 assert와 유사합니다. 조건이 충족되지 않으면 guard의 else 문이 실행되어 기능에서 벗어날 수 있습니다.
- 조건이 통과되면 여기에서 선택적 변수가 보호문이 호출 된 범위 내에서 자동으로 랩핑 해제됩니다 (이 경우 fooGuard (_ :) 함수).
- 불량 사례를 조기에 확인하여 기능을보다 읽기 쉽고 유지 보수하기 쉽게 만듭니다.
이 같은 패턴은 선택 사항이 아닌 값에도 적용됩니다.
func fooNonOptionalGood(x: Int) {
guard x > 0 else {
// Value requirements not met, do something
return
}
// Do stuff with x
}
func fooNonOptionalBad(x: Int) {
if x <= 0 {
// Value requirements not met, do something
return
}
// Do stuff with x
}
여전히 궁금한 점이 있으면 전체 기사 : Swift guard statement를 읽으십시오 .
마무리
마지막으로, 읽고 테스트 한 결과 가드를 사용하여 옵션을 풀면
그 래핑되지 않은 값은 나머지 코드 블록에서 사용할 수 있도록 유지됩니다.
.
guard let unwrappedName = userName else {
return
}
print("Your username is \(unwrappedName)")
래핑되지 않은 값은 if 블록 안에서만 사용할 수 있습니다.
if let unwrappedName = userName {
print("Your username is \(unwrappedName)")
} else {
return
}
// this won't work – unwrappedName doesn't exist here!
print("Your username is \(unwrappedName)")