2016-06-15 2 views
2

나는 내 자신의 오류를 만들고 스위프트에서 throws 키워드로 트리거하는 방법을 알게되었습니다. 다른 언어 (또는 Ruby rescue)에있는 일반 try - catch을 처리 할 수없는 예외를 복제하는 방법은 얻을 수 없습니다. (스위프트에서)Swift에서 try-catch를 사용하는 방법?

예 :

func divideStuff(a: Int, by: Int) -> Int { 
    return a/by 
} 

let num = divideStuff(4, by: 0) //divide by 0 exception 
여기

내가 예를 들어, C#으로 그것을 다룰 줄 방법은 다음과 같습니다

int DivideStuff(int a, int b) { 
    int result; 
    try { 
    result = a/b; 
    } 
    catch { 
    result = 0; 
    } 
    return result; 
} 

가 어떻게 스위프트와 같은을 달성 할 수있다?

+0

그것의'do' ..'다큐먼트에서 catch' : https://developer.apple.com/ 라이브러리/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html – Jonas

+1

try */catch와 함께 임의의 런타임 예외 (예 : 0으로 나누기)를 catch 할 수 * 없습니다. http://stackoverflow.com/questions/34628999/swift를 비교하십시오. -force-unwrapping-exception- 유사한 질문과 문서 링크로 전파되지 않습니다. –

답변

0

스위프트에는 임의의 런타임 오류를 잡을 수있는 기능이 없습니다.
개발자는 오류를 올바르게 처리해야합니다. 예를

func divideStuff(a : Int, b : Int) -> Int { 
    if b == 0 { return 0 } 
    return a/b 
} 
+1

감사합니다. Swift가 임의의 런타임 오류를 포착 할 수 없다는 것을 알지 못했습니다. 여하튼, 이것은 이상하게 느낀다. – ilovebigmacs

+0

이것은 실제로 try/catch를 설명하지 않습니다. 이것은 좋은 일이지만 방어적인 프로그래밍입니다. – geekyaleks

2

를 들어

또한이처럼 처리 할 수 ​​

enum MyErrors: ErrorType { 
    case DivisionByZero 
} 

func divideStuff(a: Int, by: Int) throws -> Int { 
    if by == 0 { 
    throw MyErrors.DivisionByZero 
    } 
    return a/by 
} 

let result: Int 

do { 
    result = try divideStuff(10, by: 0) 
} catch { 
    // ... 
} 
+0

catch 부분에서 오류를 식별 할 수 있도록 do/catch 문에 NSError로 catch let 오류를 추가 할 수 있습니다 – Ike10

관련 문제