2017-01-19 1 views
2

반환 값이없는 throwing 함수를 호출 할 때 try? (선택적 try)을 사용하면 오류가 무시됩니까? 선택적으로 반환 값이없는 함수를 시도하십시오.

func throwingVoidFunction() throws { . . . } 

try? throwingVoidFunction() 

나는 컴파일러는 반환 형식 void와 던지는 기능의 앞에 try?을 허용하지 않는 것으로 예상하지만, 컴파일러는 불평하지 않습니다.

그래서 오류를 흡수하는 방법으로 void 함수 앞에 try?을 사용하고 있습니까? (빈 기본 catch를 사용할 때와 같이 : catch {})

답변

2

컴파일러가 불평 할 이유가 없습니다.

func throwingVoidFunction() throws { ... } 

의 리턴 타입 은 Void

try? throwingVoidFunction() 

Optional<Void> 인 발현 때문에 형이고 그 값은 nil (== Optional<Void>.none) 식을 평가하는 동안 에러가 발생 된 경우 이고 그렇지 않으면 Optional<Void>.some()입니다.

반환 값을 무시하거나 nil에 대해 테스트 할 수 있습니다. 예 An elegant way to ignore any errors thrown by a method에 제시되어있다 :

let fileURL = URL(fileURLWithPath: "/path/to/file") 
let fm = FileManager.default 
try? fm.removeItem(at: fileURL) 
+0

나쁜 단순히 던진 오류를 무시하는 나쁜 스타일 아닌가요? – user1364368

+0

@ user1364368 : 일반적으로 옳습니다. 이 특별한 경우 가장 가능성있는 오류는 파일이 존재하지 않는다는 것이고 사용자는 그것에 대해 신경 쓰지 않을 것입니다. 어쨌든, 그것은 당신이 요구 한 것에 대한 예일뿐입니다. –

+0

단순히 오류를 무시하는 문제에 대한 만화도 있습니다. http://www.commitstrip.com/en/2015/07/30/coders-weaknesses-1-the-trycatch/ – user1364368

관련 문제