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

Categories:

Updated:

Leave a comment