자료형이 Error인 enum
에러를 enum 타입으로 작성할 수 있다.
enum MismathError: Error {
case nameMismatch
case numberMismatch
}
에러 던지기메소드
반환형 없음
func guessMyName(name input: String) throws {
// 매개변수로 받은 이름이 '만쥬' 일치하지 않으면
if input != "만쥬" {
print("guessMyName : 틀렸다")
// 이름 미스매치 에러를 던진다, 보낸다.
throw MismathError.nameMismatch
// return
}
print("guessMyName : 맞췄다")
}
에러호출 안함
// 에러를 처리하지 않음
try? guessMyName(name: "만슈")
에러호출
do catch를 이용해 외부로 던저진 에러를 잡아 에러 처리가 가능
do {
try guessMyName(name: "만슈")
print("guessMyName : 정답")
} catch {
// error를 출력해서 에러 확인가능
print("guessMyName : 잡은 에러 : \(error)")
}
// 결과
// guessMyName : 잡은 에러 : nameMismatch
반환형
/// 번호를 맞춘다
/// - Parameter input: 사용자 숫자 입력
/// - Returns: Bool 맞췄는지 여부
func guessMyNumber(number input: Int) throws -> Bool {
// 매개변수로 받은 숫자가 10 일치하지 않으면
if input != 10 {
print("guessMyNumber : 틀렸다")
// 이름 미스매치 에러를 던진다, 보낸다.
throw MismathError.nameMismatch
}
print("guessMyNumber : 맞췄다")
return true
}
do
do {
// (에러가 없이) 정상이면 receivedValue 가 true를 리턴
let receivedValue = try guessMyNumber(number: 10)
// true
print("guessMyNumber : 정답")
} catch {
// error를 출력해서 에러 확인가능
print("guessMyNumber : 잡은 에러 : \(error)")
}
catch
do {
// 정답이 아니면 guessMyNumber 데이터를 반환하는 메소드가 데이터를 반환하지 못하고 catch 블럭으로 넘어감
let receivedValue = try guessMyNumber(number: 9)
} catch {
print("guessMyNumber : 잡은 에러 : \(error)")
}
반응형