
do, try, catch, 그리고 throws가 비동기 프로그램을 구현하는 것은 아니지만, 앞으로 비동기 프로그램을 구현하면서 필수적으로 쓰게 될 문법 중 하나이다.
이 강의에서는 위 문법을 사용하는 방법을 알려준다.
getTitle() 함수가 optional을 return 할때, if let 구문 도는 guard 구문을 통해 오류를 다룰 수 있다.let isActive: Bool = true
func getTitle() -> (title: String?, error: Error?) {
if isActive {
return ("NEW TEXT!", nil)
} else {
return (nil, URLError(.badURL))
}
}
let returnedValue = getTitle()
if let newTitle = returnedValue.title {
self.text = newTitle
} else if let error = returnedValue.error {
self.text = error.localizedDescription
}
Result이라는 타입을 사용하는 것.Result은 제네릭 타입으로 결과값과 에러값을 명시해줘야 한다..success, .failure)func getTitle2() -> Result<String, Error> {
if isActive {
return .success("NEW TEXT!")
} else {
return .failure(URLError(.badURL))
}
}
let result = getTitle2()
switch result {
case .success(let newTitle):
self.text = newTitle
case .failure(let error):
self.text = error.localizedDescription
}
do {
try `throwing expression`
} catch `pattern` {
`statements`
}
throwing expression에는 에러를 낼 수 있는 구문을 넣습니다.pattern은 에러를 말합니다.statements는 앞의 pattern의 에러를 어떻게 처리할지에 대한 구문입니다.func getTitle3() throws -> String {
if isActive {
return "NEW TEXT!"
} else {
throw URLError(.badServerResponse)
}
}
do {
let newTitle = try getTitle3()
self.text = newTitle
} catch let error {
self.text = error.localizedDescription
}
manager.getTitle3()에서 에러가 발생한다면 (error를 throw한다면) 이하의 코드로 진행하지 않고 바로 catch 구문이 실행됩니다.Swiftful Thinking 강의
https://www.youtube.com/watch?v=p6q1RmYUsNU&list=PLwvDm4Vfkdphr2Dl4sY4rS9PLzPdyi8PM&index=1