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!
오류가 발생하지 않을 것이라는 강력한 확신을 가질때 사용
정상동작후에 바로 결과값을 돌려받음
오류가 발생하면 런타임 오류가 발생함