enum DataParsingError: Error {
case invalidType
case invalidField
case missingRequiredField(String)
}
func parsing(data: [String: Any]) throws {
guard let _ = data["name"] else {
throw DataParsingError.missingRequiredField("name")
}
guard let _ = data["age"] as? Int else {
throw DataParsingError.invalidType
}
// Parsing
}
func handleError() throws { // 구현하지 않은 에러가 발생하는 코드는 hanleErorr를 호출한 코드로 전달된다.
// 나머지 모든 에러를 처리할 수 있게 구현하거나
// 이 함수가 다른 코드에 에러를 던질 수 있게
do {
try parsing(data: [:])
} catch DataParsingError.invalidType {
print("invalid type error")
} catch {
// 패턴에 걸리지 않은 모든 에러를 처리한다.
// 어떤 에런지 확인해야 하는데 error라는 로컬 변수로 저장되는데 상수의 형식이 실제 형식이 아니라 프로토콜이기 때문에 타입캐스팅이 필요
if let error = error as? DataParsingError {
switch error {
case .invalidType:
print("invaildType")
default:
print("handle Error")
}
}
print("handle Error")
}
}