자료형이 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)") }
반응형