스위프트에서 에러 처리를 할 때 사용하는 try, try?, try!는 에러가 발생할 수 있는 상황을 어떻게 다룰지에 따라 선택해서 사용한다.
trytry는 에러가 발생할 수 있는 메서드를 호출할 때 사용하는 기본적인 방법이다. 이 방식을 사용할 때는 do-catch 블록을 함께 사용해야한다.
func fetchData() throws -> String {
throw NSError()
}
do {
let data = try fetchData()
print("성공: \(data)")
} catch {
print("에러 발생: \(error)")
}
catch 구문 뒤에 별도의 이름을 지정하지 않으면, Swift가 알아서 암시적 변수인 error에 발생한 에러를 할당해 준다.
try?try?는 옵셔널로 결과값을 받는다. 에러가 발생하면 nil이 들어있고 성공하면 값이 들어있다. do-catch문을 사용하지 않아도 된다.
// 기본
let data: String? = try? fetchData() // 성공/실패 상관 없이 옵셔널 타입
// 응용
if let safeData = try? fetchData() {
print("성공: \(safeData)")
} else {
print("실패해서 nil 반환")
}
보통 if-let이나 guard-let과 함께 사용해서 안전하게 값을 꺼내 사용한다.
try!try!는 결과를 강제 언래핑한다. 에러가 절대 안 난다고 확신할 때 사용한다. 당연히 에러가 발생하면 앱이 강제 종료된다.
let data: String = try! fetchData()
print(data)
trytry?try!