totalNumber / inputNumber
0으로 나눌 수 없습니다. -> 에러를 처리해줘야합니다.
if 문으로 해결
if inputNumber != 0 {
throw totalNumber / inputNumber
}
do {
try devideByinputNumber(input)
}catch{
print(error)
{
예외를 던져주는 throw 받아주는 catch를 사용합니다.
do{
try code
}catch{
catch error
}
Swift에서는 컴파일러와 런타임 중 발생하는 여러 가지 종류의 에러를 다룰 수 있습니다.
코드 작성 시점에서 발견되는 컴파일 에러와 프로그램 실행 중 발생하는 런타임 에러로 구분 됩니다.
문법 에러 : 코드가 올바른 Swift 문법을 따르지 않을 때 발생합니다. 이러한 에러는 컴파일하는 동안 발생하며, 컴파일러는 에러 메시지와 함게 해당 줄 및 위치를 알려줍니다.
타입 에러 : 변수나 함수 등의 타입이 일치하지 않거나 타입 변환에 문제가 있을 때 발생합니다.
강제 언래핑 에러 : 옵셔널 변수나 옵쳐널 체인이 nil 값을 가리키고 있는 상태에서 강제 언래핑('!')을 시도할 때 발생합니다. 이는 nil 값을 언래핑하여 접근하려 할 때 발생하는 에러로, 런타임 중에 프로그램이 비정상적으로 종료됩니다.
배열 인덱스 초과 에러 : 배열의 인덱스 범위를 초과하여 접근하려고 할 때 발생합니다.
nil 값 처리 에러 : 옵셔널 타입의 변수를 제대로 처리하지 않고 nil 값을 사용하려 할 때 발생합니다. nil 값인 옵셔널 변수에 접근하면 에러가 발생합니다.
기타 런타임 에러 : 0으로 나누기, 잘못된 형변환, 잘못된 API 사용 등 여러 가지 상황에서 런타임 에러가 발생할 수 있습니다. 이러한 에러는 프로그램이 실행되는 동안 발생하며, 예외 처리 등의 방법으로 처리할 수 있습니다.
enum CustomError: Error {
case someError
}
func processValue(_ value: Int) throws {
if value < 0 {
throw CustomError.someError
}
// 에러가 발생하지 않으면 정상적으로 처리합니다.
print("Value is positive.")
}
do {
try processValue(-1)
} catch {
print("An error occurred: \(error)")
}
던져진 에러를 받고싶지 않을때 = nil
try? CustomError.someError
처럼 ?로 처리를 할수 있습니다
try! CustomError.someError
!로 처리를 할 경우 에러가 무조건 없을 것이다.라는 뜻입니다. > 에러가 있을 경우 에러 발생
func divide(_ dividend: Int, by divisor: Int) -> Int {
assert(divisor != 0, "Divisor cannot be zero.")
return dividend / divisor
}
let result = divide(10, by: 0) // Assertion failed: Divisor cannot be zero.
참고(출처) : 개발하는 정대리, 야곰(Swift 5)
저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!