iOS 캠프 TIL - 2020.11.25 수
UInt 값끼리 “-“연산할 때 예외 처리
문제
UInt 값끼리 빼는 코드의 에러 발생에 대해서 생각하지 못했고, 코드 리뷰에서 알게 되어 수정하려 했다.
// 예시
func minus(number: UInt) {
var origin: UInt = 3
origin -= number
}
위 코드에서는 number가 3이하라면 UInt값 사이의 -연산 결과가 0 이상이므로 에러가 나지 않지만, 만약 number 값을 4 이상 준다면 UInt 타입은 음수를 저장할 수 없으므로 에러가 발생한다.
그래서 미리 예외 처리를 하고 싶었다.
// 예시
func minus(number: UInt) -> Bool {
var origin: UInt = 3
guard origin - number >= 0 else {
return false
}
origin -= number
return true
}
이러면 될까? (안된다.)
guard else 구문에서 else 구문에 “Will never be executed” 경고가 뜨며, numberd 에 4이상 값을 넣으면 guard else에서 거르지 못하고 에러난다.
UInt끼리의 연산에서 음수 자체가 나오면 안 되는 것 같다.
해결 방법
// 예시
func minus(number: UInt) -> Bool {
var origin: UInt = 3
guard Int(origin) - Int(number) >= 0 else {
return false
}
origin -= number
return true
}
UInt -> Int로 형변환해서 먼저 검사하도록 했다.
이렇게 하면 경고도 뜨지 않고, 연산 값이 음수가 되는 경우 guard else 구문에서 걸러진다.
Leave a comment