Language/Swift-Basic

Swift - 에러

Jessi :D 2022. 2. 25. 20:43

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