Swift

Swift try-catch

eddie0329 2021. 11. 28. 20:40
λ°˜μ‘ν˜•

πŸ“Œ λͺ©λ‘

  • μ—λŸ¬ μ²˜λ¦¬λž€?
  • Example
  • ν•¨μˆ˜ μ•ˆμ—μ„œ 처리
  • do try catch
  • κ°’ 전달 λ°›κΈ°

πŸ“Œ μ—λŸ¬ μ²˜λ¦¬λž€?

ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•œ 상황에 λŒ€ν•΄ λŒ€μ‘ν•˜κ³  이λ₯Ό λ³΅κ΅¬ν•˜λŠ” κ³Όμ •

πŸ“Œ Example

μ—λŸ¬λ₯Ό λ°œμƒ μ‹œν‚€λ €λ©΄ μ΄λ ‡κ²Œ ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

enum PhoneError: Error {
  case unknown
  case batteryLow(batteryLevel: Int)
}

throw PhoneError.batteryLow(batteryLevel: 20) // Error!

πŸ“Œ ν•¨μˆ˜ μ•ˆμ—μ„œ 처리

// throws λ’€μ—λŠ” 리턴 νƒ€μž…
func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {
  guard batteryLevel != -1 else { throw PhoneError.unknown }
  guard batteryLevel >= 20 else { throw PhoneError.batteryLow(batteryLevel: 20) }
  return "배터리 μƒνƒœκ°€ 정상 μž…λ‹ˆλ‹€."
}

πŸ“Œ do, catch

func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {
  guard batteryLevel != -1 else { throw PhoneError.unknown }
  guard batteryLevel >= 20 else { throw PhoneError.batteryLow(batteryLevel: batteryLevel) }
  return "배터리 μƒνƒœκ°€ 정상 μž…λ‹ˆλ‹€."
}

do {
  try checkPhoneBatteryStatus(batteryLevel: 10) // μ—λŸ¬κ°€ λ°œμƒν• μˆ˜ μžˆλŠ” ꡬ간에 try λ₯Ό 적어쀀닀
} catch PhoneError.unknown {
  print("μ•Œμˆ˜ μ—†λŠ” μ—λŸ¬ μž…λ‹ˆλ‹€.")
} catch PhoneError.batteryLow(let batteryLevel) {
  print("배터리 전원 λΆ€μ‘± 남은 베터리 : \(batteryLevel)%")
} catch {
  print("κ·Έμ™Έ 였λ₯˜ λ°œμƒ : \(error)") // μ§€μ—­ λ³€μˆ˜λ‘œ error κ°€ λ‚˜μ˜€κ²Œ λœλ‹€.
}

πŸ“Œ κ°’ 전달 λ°›κΈ°

μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ nill 을 λ°›κΈ° λ©λ‹ˆλ‹€.

let status = try? checkPhoneBatteryStatus(batteryLevel: -1)
status // nil
λ°˜μ‘ν˜•