안녕하세요 :)
바로 시작해보겠습니다
개발에 있어서, 오류 처리는 아주 아주 중요한 부분임!!
안정성을 위해서도 사용자 경험에 있어서도
중요한 부분이기 때문에
예상치 못한 오류를 막기 위해 꼭 알아야함!
아래와 같은 PrintError라는 열거형을 예로 들면
enum PrinterError: Error {
case outOfPaper
case noToner
case onFire
}
아래 코드의 메소드 send 안에서
에러를 처리해주려면
에러가 발생할 가능성이 있는 메소드의 제목 옆에 throws를 써준 후
오류가 발생하는 구간에 throw를 써주면 된다.
여기서 throws 키워드는 오류를 던질 수 있음을 나타내고
throw 키워드를 사용해서 오류를 던짐
func send(job: Int, toPrinter printerName: String) throws -> String {
if printerName == "Never Has Toner" {
throw PrinterError.noToner
}
return "Job sent"
}
이외에도 에러를 다루는 방법은 몇가지가 더 있는데
do-catch 키워드로 에러를 처리할 수 있음
do {
let printerResponse = try send(job: 1040, toPrinter: "Bi Sheng")
print(printerResponse)
} catch {
print(error)
}
이렇게 do 블록 안에 오류가
발생할 수 있는 코드를 작성하고
에러가 발생할 시
catch 안의 중괄호로 보내
오류를 처리한다.
try 키워드는 에러가 발생할 수 있지만
한번 트라이 해볼께 라는 의미이고
만약 오류가 발생하면 catch 블록으로 전달된다.
에러가 특정하게 여러가지로 나뉜다 싶으면
catch를 두번 이상 써주는 것도 가능하다.
그럼 개별적으로 오류를 처리하는데
switch 키워드 문과 유사하다고 보면된다.
아래는 예시
do {
let printerResponse = try send(job: 1440, toPrinter: "Gutenberg")
print(printerResponse)
} catch PrinterError.onFire {
print("I'll just put this over here, with the rest of the fire.")
} catch let printerError as PrinterError {
print("Printer error: \(printerError).")
} catch {
print(error)
}
이외에도 모든 코드가 실행된 후에
작동하게 하는 키워드가 있는데
바로 defer 키워드다.
이 키워드 안에 있는 코드는
에러가 발생하는 것에 상관없이
작동하게 된다.
var fridgeIsOpen = false
let fridgeContent = ["milk", "eggs", "leftovers"]
func fridgeContains(_ food: String) -> Bool {
fridgeIsOpen = true
defer {
fridgeIsOpen = false
}
let result = fridgeContent.contains(food)
return result
}
fridgeContains("banana")
print(fridgeIsOpen)
//false가 프린트 됨
'Swift' 카테고리의 다른 글
Swift) Struct와 Class: mutating의 역할 (0) | 2024.01.30 |
---|---|
Swift) Enum: RawValue와 Optional 값 처리 (0) | 2024.01.30 |
XCode) 커스텀 단축키: 커서 바로 밑, 위에 라인 추가하기 (2) | 2024.01.21 |