[Swift4] try catch 예외사항 처리방법

개발/iOS - Swift 2018. 8. 21. 13:05
반응형

Swift에서 구현하다보면 try catch 를 사용하게 됩니다.

특히 throws 키워드가 선언되어 있는 메소드는 try catch를 안쓰면 에러가 발생하게 되는데 이때 어떻게 처리하는지에 대해서 알아보고자 합니다.


본 포스팅은 2장에 걸쳐 진행하려고 합니다.

1장은 try catch 사용법에 관한 부분에 대해서 설명하고, 2장은 커스텀 throws를 사용하여 핸들링 하는 방법에 대해 설명하려고 합니다.



1. try catch 미사용 오류



throws 오류가 발생되는 메소드 사용시 위와같이 "Call can throw, but it is not marked with 'try' and the error is not handled" 오류가 발생하게 됩니다.

이럴때 try catch 문을 사용하여 처리하여야 합니다.


잠깐, 어떤 메소드를 호출 할 때 이런 오류를 발생 할까요? 

그것은 함수 선언시 throws 키워드가 선언되어 있을 경우에 발생하게 됩니다. 




여러가지 테스트 해보기 위해 throws 키워드를 선언한 메소드를 만들어서 테스트 해봅시다.

1
2
3
4
5
6
7
func printSwift(_ _strData:String?) throws
{
    if let strData = _strData
    {
        print ("print = \(strData)")
    }
}
cs



어때요? 동일하게 발생하죠?

2. 여러가지의 예외상황 형태 (do..catch, try?, try!)

예외상황을 처리하기 위해서는 3가지 방법이 있습니다. 


1) do .. catch

 try..catch 사용법하고 비슷합니다. 차이점은 do..catch 라는 점이고 예외상황을 적용해야 하는 메소드에 try 를 붙여줘야 한다는 거죠. 



2) try?

do..catch 보다 간단한 방식으로 한줄로 적용할 수 있습니다.



차이점은 에러가 발생 시 nil 을 반환하고, 리턴값을 전달할 때 옵셔널로 전달됩니다.


3) try!

try?와 비슷하게 사용합니다. try?와 차이점은 에러가 발생시 가차없이 Crash 발생하며 앱이 죽어버립니다.

그리고 리턴값 타입은 unWrapping 형식으로 리턴됩니다. 



try!는 좀 위험하기 때문에 일반적으로는 do..catch, try? 가 많이 쓰입니다. 

3. try? 주의점 

옵셔널 타입의 리턴값이 있을 경우 try? 를 쓰게되면 이중 Wrapping 됩니다. 그래서 옵셔널 바인딩 할때 주의 하셔야 합니다.

아래 소스의 str 상수를 살펴보시면 됩니다.





다음 포스팅에서는 메소드에서 throws 발생시키는 방법과 Error 를 상속 받아서 커스텀하게 발생하도록 해보겠습니다.!!


try catch 예외사항 커스텀에러 정의하기

반응형
admin