-
Swift 오류 처리 - 1Programming/Swift(iOS) 2021. 4. 6. 09:38728x90
Swift에는 오류를 처리할 수 있는 방법들이 많이 있습니다.
Error Protocol을 구현해주면 되는데요.
에러는 상호 베타적이기때문에, 한 에러가 발생하면 다른 에러는 발생하지 않아야합니다.
-> Enum을 가지고 구현하면 편합니다.
추가적인 정보가 필요한 경우에는 struct나 class도 가능합니다.
에러에 대한 정보는 함수 위에 미리 넣어주는게 좋습니다. (Command + option + /)
enum ParseLocationError:Error { case invalidData case network(String) case locationDoesNotExist } struct Location { let latitude:Double let longitude:Double } /// 유요한 위치인지 확인 /// - Parameters: /// - latitude: 위도 /// - longitude: 경도 /// - Throws: 유효하지 않은 데이터인 경우, invalidData를 발생시킵니다. /// - Returns: Location func parseLocation(_ latitude:String, _ longitude:String) throws -> Location { guard let latitude = Double(latitude), let longitude = Double(longitude) else { throw ParseLocationError.invalidData } return Location(latitude: latitude, longitude: longitude) }
parseLocation은 에러가 발생하면 throws를 통해서 ParseLocationError을 던지도록 되어 있습니다.
throws를 받으려면 어떻게 해야될까요?
1. try funtion()
-> error가 발생하면 프로그램이 비정상종료됩니다.
try parseLocation("a", "b")
2. do ~ catch
-> error가 catch block에 전달되므로 처리가 가능합니다.
catch에는 error의 최상위 타입이 전달됩니다. 따라서 switch로 구분하고, 우리가 정의한 Error이외의 Error가 더 올수 있으므로 항상 default를 같이 표시해줍니다.
do { let loc:Location = try parseLocation("A", "23.23") } catch let error{ print(error) } do { let location = try parseLocation("A", "4.5") print(location) } catch { print(error) switch error { case ParseLocationError.invalidData: print("invalidData") case ParseLocationError.network(let message): print("netword = \(message)") case ParseLocationError.locationDoesNotExist: print("locationDoesNotExit") default: print("another error") } } // catch에서 에러의 종류로 직접 처리 가능하다. do { let location = try parseLocation("A", "4.5") print(location) } catch ParseLocationError.invalidData { print("invalidData") } catch ParseLocationError.network(let message) { print("netword = \(message)") } catch ParseLocationError.locationDoesNotExist { print("locationDoesNotExit") } catch { print("another error") } //에러의 타입을 기반으로 다른 처리를 하는것도 가능하다. do { let location = try parseLocation("A", "4.5") print(location) } catch let error as ParseLocationError { print(error) } catch { print(error) }
만약 error가 발생했을 때, 처리하고 싶은 부분이 있으면 어떻게 해야될까요?
java에서 finally같은 역할이 swift에도 있을까요?
-> defer를 이용하시면 됩니다.
'Programming > Swift(iOS)' 카테고리의 다른 글
Swift 오류처리 - 3 (0) 2021.04.06 Swift 오류 처리 - 2 (0) 2021.04.06 Swift 상속 (0) 2021.04.03 Swift 초기화 메서드 (0) 2021.04.02 Swift Optional - 2 (0) 2021.04.02