728x90
안녕하세요.
이번에는 precondition이 뭔지 간단하게 알아볼게요.
# 1. precondition 이란?
precondition은 예상하지 못한 상황을 대비한 방어코드입니다.
condition = false 일 경우, 예상하치 못한 상황이라고 판단하여 message를 출력해주고 precondition 이후의 코드가 실행되지 않습니다.
func isLessThanOrEqualZero(num: Int) -> Bool {
if num <= 0 {
return false
}
return true
}
print("Before precondition")
precondition(isLessThanOrEqualZero(num: 0), "num <= 0")
print("num > 0") // 출력되지 않음.
# 2. precondition vs assert
assert하고 차이점은
assert는 디버그 빌드에서만 동작하고,
precondition은 디버그 & 릴리즈 빌드 모두 동작하게 됩니다.
# 3. Error가 발생하는 경우
아래 코드처럼 error를 던져주는 method에 precondition을 적용을 하면 에러가 발생합니다.
enum MyError: Error {
case lessThanZero
}
func test(num: Int) throws -> Bool {
if num < 0 {
throw MyError.lessThanZero
}
return true
}
precondition(test(num: 0)) // error: call can throw, but it is executed in a non-throwing autoclosure
그 이유는 test method는 error를 던져주는데, precondition은 non-throwing 하기 때문에 에러가 발생하는 것이에요.
이럴 경우에는 뻔한 해결 방법이지만 try로 감싸주세요ㅎㅎ
enum MyError: Error {
case lessThanOrEqualZero
}
func test(num: Int) throws -> Bool {
if num <= 0 {
throw MyError.lessThanOrEqualZero
}
return true
}
precondition((try? aLittle(num: 0)) ?? false) ✅
## 참고
- https://bootstragram.com/blog/swift-precondition-that-throws/
이번 글은 여기서 마무리.
반응형
'Swift' 카테고리의 다른 글
PersonNameComponents를 사용해서 이름 파싱하기 (0) | 2022.03.23 |
---|---|
[오픈소스] Flow (0) | 2022.03.16 |
[Swift 5.6] Swift 5.6 추가된 기능들 (1) | 2022.03.12 |
CryptoKit을 사용한 암호화 (0) | 2022.02.23 |
async/await 용 public API를 추가할 때 고려사항 (1) | 2022.02.23 |