programing

시도해봐! & try? 차이점은 무엇이고, 각각을 언제 사용해야 할까?

magicmemo 2023. 4. 21. 20:26
반응형

시도해봐! & try? 차이점은 무엇이고, 각각을 언제 사용해야 할까?

Swift 2.0에서 애플은 오류를 처리하는 새로운 방법(do-try-catch)을 도입했습니다.그리고 며칠 전 베타 6에서는 훨씬 더 새로운 키워드가 도입되었습니다.try?또, 사용할 수 있는 것도 알았습니다.try!3가지 키워드의 차이와 사용 타이밍은?

Swift 5.1용으로 갱신

다음과 같은 던지기 기능을 가정합니다.

enum ThrowableError: Error {

    case badError(howBad: Int)
}

func doSomething(everythingIsFine: Bool = false) throws -> String {

  if everythingIsFine {
      return "Everything is ok"
  } else {
      throw ThrowableError.badError(howBad: 4)
  }
}

해라

던질 수 있는 함수를 호출할 때 두 가지 옵션이 있습니다.

콜을 do-catch 블록 내에서 둘러싸는 것으로, 에러 처리를 실시할 수 있습니다.

do {
    let result = try doSomething()
}
catch ThrowableError.badError(let howBad) {
    // Here you know about the error
    // Feel free to handle or to re-throw

    // 1. Handle
    print("Bad Error (How Bad Level: \(howBad)")

    // 2. Re-throw
    throw ThrowableError.badError(howBad: howBad)
}

또는 함수를 호출하여 콜체인의 다음 발신자에게 에러를 전달합니다.

func doSomeOtherThing() throws -> Void {    
    // Not within a do-catch block.
    // Any errors will be re-thrown to callers.
    let result = try doSomething()
}

해봐!

안에 0이 있는 암묵적으로 언랩된 옵션에 액세스하려고 하면 어떻게 됩니까?네, 맞습니다. 앱은 크래시! 시도도 마찬가지입니다! 기본적으로 에러 체인을 무시하고 "Do or Die" 상황을 선언합니다.호출된 함수가 에러를 발생시키지 않으면 모든 것이 정상적으로 진행됩니다.그러나 오류가 발생하여 오류가 발생하면 응용 프로그램이 크래시됩니다.

let result = try! doSomething() // if an error was thrown, CRASH!

해보는 거야?

Xcode 7 베타 6에서 도입된 새로운 키워드입니다.성공한 값을 압축 해제하는 옵션을 반환하고 0을 반환하여 오류를 검출합니다.

if let result = try? doSomething() {
    // doSomething succeeded, and result is unwrapped.
} else {
    // Ouch, doSomething() threw an error.
}

또는 가드를 사용할 수 있습니다.

guard let result = try? doSomething() else {
    // Ouch, doSomething() threw an error.
}
// doSomething succeeded, and result is unwrapped.

마지막 메모는 다음과 같습니다.try?발생한 에러는 0으로 변환되므로 파기합니다.실패 이유가 아니라 성공과 실패에 더 집중할 때 시도를 사용하세요.

통합 연산자를 사용하시겠습니까?

병합 연산자를 사용할 수 있습니까?try?를 사용하여 장애 발생 시 기본값을 제공합니다.

let result = (try? doSomething()) ?? "Default Value"
print(result) // Default Value

언급URL : https://stackoverflow.com/questions/32390611/try-try-try-what-s-the-difference-and-when-to-use-each

반응형