2017-01-30 5 views
0

우리는 개발자가 같은 것을 할 우리의 코드베이스의 영역이 많이 있습니다Swift에서 예외 처리 코드를 자동으로 주입 할 수 있습니까?

try { 
    // code 
} catch let error { 
    print("error \(error)") 
} 

콘솔 오류를 기록하는 것은 매우 도움이되지 않습니다, 및 여전히 사람들이 더 나은 뭔가를 큰 것 동안 이 작업을 수행.

예외 처리기에 코드를 자동으로 추가하는 것이 가능한지 궁금합니다. 빌드시 코드를 삽입하는 것이 이상적입니다. 그것은 우리가 버리고있는 오류의 유형을보기 위해 순전히 추적하는 것입니다.

(한 가지 해결책은 이런 종류의 행위를 허용하지 않을 것이라는 것을 알고 있지만, 일반적인 예외 처리를 통해 예외 유형을 확인하는 것입니다.)

+0

명시 적으로 예외를 catch하지 않고 예외를 잡을 수있는 방법이 있는지 기본적으로 묻고 있습니까? 그 이유가 정확히 무엇입니까? catch 블록을 작성하지 않으려 고합니다. –

+0

장치에 멈추지 않고 내 서버로 오류 로그를 자동으로 보내고 싶습니다. –

+0

물론, 처리 된 오류는 물론 크래시도 로깅하는 데 관심이 있습니다. –

답변

1

이 시점에서 오류를 기록하지 않으려면 오류를 포착하지 말고 오류를 일으킬 수 있습니다. 방법 throws을 표시하고 try 블록에 넣지 마십시오. 그런 다음 최상위 레벨에서만 로그 (또는 다른 작업) 할 수 있습니다.

또는, 당신은 기능 블록을 포장 할 수 있습니다 : 만약 당신이 좋아하면

func trylog(_ f:() throws -> Void) { 
    do { 
     try f() 
    } catch { 
     print(error) 
    } 
} 

그런 trylog 당신이 뭔가 다른 것이 아니라 print을 할 수 있습니다.

스위프트 try/catch은 실제로 예외는 아닙니다. 그것들은 에러 리턴을 둘러싼 특별한 구문 일뿐입니다. 즉, 연결하기위한 환상적인 런타임 메커니즘이 없다는 것을 의미합니다 (return이 호출 될 때마다 연결되는 것과 매우 흡사합니다).

콘솔 로깅은 장치에서 쉽게 액세스 할 수 없기 때문에별로 도움이되지 않지만 대부분의 경우 "그냥 로깅하십시오"라는 메시지는 catch에 넣는 것이 옳다고 생각합니다. 블록. 모바일 앱에서 더 유용한 일이 발생하는 경우는 드뭅니다. Devs는 "그냥 기록하십시오"에 대해 죄책감을 느낍니다. 그러나 "올바르게하고 있다면"정확히 무엇을 할 것입니까? print을 더 많은 기능을 갖춘 로거로 대체하여 값을 늘리거나 적어도 print을 자신의 함수로 래핑하면 나중에 더 나은 기능으로 바꿀 수 있습니다.

+0

빠른 답변 주셔서 감사합니다! 내 목표는 자동으로 오류를 기록하므로 개발자는 걱정할 필요가 없다고 생각합니다. 기본적으로 나는 이러한 오류를 기록하고 배치 한 다음 crashlytics가 처리되지 않은 예외에 대해 수행하는 것과 유사한 서버로 보냅니다. –

+0

우리는 어디서나 Crashlytics.shared.recordError (오류)를 사용할 수 있습니다. 자동으로 실행하는 것이 멋지다고 생각했습니다. –

+0

실제로, 커스텀'print' 또는 더 나은 로거를 갖는 것은 이것에 대해서도 잘 작동합니다. –