Error 처리
Updated:
🔷 Error
// 자료형이 Error 로 만들 수 있음 enum 을 사용해서
// Error 의 정의 : A type representing an error value that can be thrown.
enum MismatchError: Error {
case nameMismatch
case numberMismatch
}
// throw 를 통해 에러를 밖으로 던진다
// 에러를 밖으로 보낸다고 메소드 반환 부분에 throws
// throws 는 아래쪽 처리 하지 않고 return 한다음에 로직이 종료
// return 은 throws 처럼 밖으로 값을 내보내는데 남아있는 아래의 로직을 다 끝내고 종료함
func guessMyName(name userInput: String) throws {
// 매개변수로 받은 이름이 Jacob 과 일치하지 않으며
if (userInput != "Jacob") {
throw MismatchError.nameMismatch
}
}
// error 를 받지 않겠다는것은은 try 뒤에 ? 을 붙여줌
try? guessMyName(name: "Emma") // nil
// do catch 를 이용해 외부로 던저진 에러를 잡아 에러 처리가 가능함
do {
try guessMyName(name: "Jacob")
print("성공입니다")
} catch {
// error 출력해서 에러 확인 가능
print("에러 발생 : \(error)") // 애러 발생 : nameMismatch
}
🔶 error 를 반환 하기
/// 번호를 맞춘다
/// - Parameter userInput: 사용자 숫자 입력
/// - Returns: 맞췄는지 여부
func guessMyNumber(name input: Int) throws -> Bool {
print("guessMyName() called")
if input != 10 {
print("틀렸다")
throw MismatchError.numberMismatch
}
print("맞췄다")
return true
}
do {
let receivedVale = try guessMyNumber(name: 10) // true
} catch {
print("Error: \(error)") // Error: numberMismatch
}
📌 정리 : 로직을 만들때 Error 타입을 enum 으로 만들 수 있고, check 하는 method 같은 경우에는 throw error 를 던지게 되면, do, catch 방식으로 error 를 받아서 후처리 할 수 있습니다
만약 error 를 받지 않는 다면, try? 로 error 처리를 따로 하지 않고 사용하고, error 가 발생되면 nil 로 출력이 됨
에러를 던지는 형식에서 throws -> 데이터를 반환 하는 경우에는 throws 해서 잡을때는 try 에서 error 를 던지는 것이 아니라 catch 불럭에서 잡을 수 있습니다
Reference
꼼꼼한 재은 씨의 스위프트 문법편 - https://book.jacobko.info/#/book/1186710233
개발하는 정대리 스위프트 기초 문법 - 17일차 / 애러 error - https://www.youtube.com/watch?v=8nPQKGrpbmY&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=17
Leave a comment