STUDY/Swift & iOS

Swift 문법 기초 8

sinawi95 2022. 6. 27. 20:17
728x90

예외

Error 프로토콜을 사용해서 표현함

  • 주로 열거형을 사용해서 오류의 종류를 나타냄
enum ErrorName: Error {
	case case1
	case case2
	case case3
}

예외 발생

오류 발생의 여지가 있는 메서드는 throws를 사용해서 오류를 내포하는 함수임을 표시함

예시

class VendingMachine {
	// skip
	func receiveMoney(_ money: Int) throws {
		guard money > 0 else {
			throw VendingMachineError.invalidInput
		}
		self.deposited += money
	}
	func vend(numberOfItems numberOfItemsToVend: Int) throws -> String {
		// skip...
	}
}

예외 처리

프로그램이 종료되지않도록 발생한 예외에 대한 처리가 필요함

오류가 발생할 여지가 있는 throws 함수는 try를 사용해서 호출해야함

do-catch

가장 정석적인 방법으로 모든 오류 케이스에 대응함

do {
	try machine.receiveMoney(0)
} catch VendingMachineError.invalidInput {
	print("입력이 잘못되었습니다.")
} catch ... {}

// 하나의 catch 블럭에서 switch 구문을 사용해서 분류할수 있음
do {
	try machine.receiveMoney(0)
} catch /*(let error)*/{
	switch error {
	case VendingMachineError.invalidInput:
		print("입력이 잘못되었습니다.")
	case ...:
	default:
	}
} 
  • 케이스별로 처리할 필요없으면 간략화 해서 사용해도 됨
    • do { try func() } catch { }
    • do { try func() }

try?와 try!

try?

오류 발생시 결과값을 nil로 돌려받을수 있음.

정상 동작후에는 옵셔널 타입으로 정상 반환값을 돌려받음

try!

오류가 발생하지 않을 것이라는 강력한 확신을 가질때 사용

정상동작후에 바로 결과값을 돌려받음

오류가 발생하면 런타임 오류가 발생함