예외처리
프로그램의 안정성을 유지하고 예외 상황이 발생했을 때 프로그램이 비정상적으로 종료되는 것을 방지하기 위함
try와 do-catch
try 키워드를 사용하여 에러가 발생할 수 있는 코드를 실행하고,
에러가 발생하면 catch 블록에서 해당 에러를 처리
enum NetworkError: Error {
case badURL(String)
case requestFailed
}
// do, try, catch를 사용하여 에러핸들링 하는 코드
do {
let data = try fetchData(url: "https://invalid.url")
print("Data received: \(data)")
} catch NetworkError.badURL(let stringValue){
print("Invalid URL.")
print(stringValue)
} catch NetworkError.requestFailed {
print("Request failed.")
} catch {// 위에 catch에서 잡히지 않은 모든 에러
print("Unknown error: \(error)")
}
throw와 throws
예외 상황이 발생했을 때 특정 오류를 던지기 위해 사용
던질 수 있다는 것을 명시던짐import Foundation
// 에러를 던지는 함수(throws) 선언
// 파라미터 괄호 뒤에 throws를 입력
func fetchData(url: String) throws -> String {
guard let url = URL(string: url) else {
throw NSError(domain: "Invalid URL", code: 404, userInfo: nil)
}
return "Data"
}
try?와 try!
에러를 간편하게 처리할 수 있는 방법을 제공하며, do-catch 없이 사용 가능
try? (Optional try): Error가 발생한다면 nil 리턴try! (Forced try): Error가 발생하지 않는다고 확실할 때 사용. 만약 Error가 발생한다면 crash 발생 (사용 ❌)// do catch를 생략하고 try? try!를 사용 하는 방법
// try?는 에러가 발생하면 nil을 반환
let data = try? fetchData(url: "https://invalid.url")
print(data ?? "No data") // No data
// try!는 에러가 발생하면 크래시가 발생
let data = try! fetchData(url: "https://valid.url")
print(data)