티스토리 뷰

iOS

[Swift] fatal Error

Peppo 2022. 9. 25. 13:38
728x90

오늘은 fatal Error에 대해 공부해보려고 합니다.

 

예를들어 정해진 index보다 초과해서 접근하려는 경우 fatal error가 발생하기도 하고 이외에도 여러가지가 있는데요.

 

바로 공식문서 부터 보겠습니다.


Fatal Error

 

무조건 실행을 중지하고 메시지를 출력합니다.

 

정의

func fatalError(
    _ message: @autoclosure () -> String = String(),
    file: StaticString = #file,
    line: UInt = #line
) -> Never

 

(으.. Never는 또 뭐야..)

 

Never는 값이 없는 타입을 말한다네요. (정상적으로 리턴하지 않는 함수의 리턴 타입)

 

즉, fataError는 메소드에서 리턴할 것이 없을때, 생각지 못한 에러가 있을때 사용하면 문제되는 부분을 알 수 있습니다.

 

사용 예제를 볼게요.

아래는 tableView에서 cellForRowAt 메서드 구현하는 부분입니다.

override func tableView(_ tableView: UITalbeView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(
            withReuseIdentifier: BookCell.identifier,
            for: indexPath
        ) as? BookCell else { fatalError("BookCell을 불러오는데 실패했습니다.") }
        return cell
    }

 

TableViewCell을 리턴하는데 BookCell이라는 Cell을 리턴하고 싶어요.

근데 만약 BookCell이라는게 없을때, 보통은 UITableViewCell()로 return을 하도록 구현하지만 결국은 빈 Cell이니까 의미가 없습니다.

return을 사용하는것 보다 fatal Error()를 호출해서 타입캐스트가 실패하면 적절한 메시지를 남겨놓는게 더 좋은 방법입니다.

 

물론 fatalError가 호출되면 앱이 죽는 현상이 나타나기 때문에 호출될일이 없도록 해야하겠지만, 추후 디버깅을 하는데에는 도움이 됩니다. 


 

참고

https://www.hackingwithswift.com/example-code/language/how-to-force-a-crash-using-fatalerror

 

728x90