모바일/SwiftUI ios 공부
try-catch, do-catch, try?, try!오류처리, 예외처리/ Xcode SwiftUI Playground 공부
yy_dd2
2021. 11. 29. 03:06
반응형
에러처리 try-catch
// 스위프트 열거형은 에러 프로토콜을 만들기 좋음
enum PhoneError:Error {
case unknown
case batteryLow(batteryLevel: Int)
}
// 배터리가 부족할때 에러를 발생
// 에러 발생시키기
// 코드 사용 후 아래 코드를 실행하기 위해 주석처리하기
throw PhoneError.batteryLow(batteryLevel: 20)
// 던져진 오류를 알리거나 처리하기
1. 에러가 발생한 함수에서 반환 값으로 에러를 반환하여, 해당 함수를 호출한 코드에서 에러를 처 리하도록 합니다.
2. do-catch 구문
3. 옵셔널 값을 반환합니다.
4. assert 를 이용하여 강제로크래쉬를 발생합니다. ( 오류가 발생하지 않을 것이라고 확신하기)
// 핸드폰의 배터리 상태를 체크하는 함수 만들기
/*
// 반환값 없음
func checkPhoneBatteryStatus(batteryLevel: Int) throws {
}
*/
// 반환값이 있다면 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 구문
do {
try 오류 발생 가능 코드 {
} catch 오류 패턴 {
처리코드
}
do {
//try checkPhoneBatteryStatus(batteryLevel: -1)
try checkPhoneBatteryStatus(batteryLevel: 20)
}
catch PhoneError.unknown{
print("알 수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batterryLebel) {
print("배터리 전원 부족 남은 배터리 : \(batterryLebel)%")
} catch {
print("그 외 오류 발생 : \(error)")
}
try?
에러를 옵셔널 값으로 변환해 처리하기
// try? 사용하기
// 에러를 옵셔널 값으로 변환
let status = try? checkPhoneBatteryStatus(batteryLevel: -1)
print(status)
let status2 = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status2)
try!
에러를 강제로 발생하지 않을 것이라고 확신하여 사용하기
try! 를 사용했는데 에러가 발생하면 강제로 종료됨
// try! 사용하기
// 에러가 발생될거 같은 값에 ! 를 사용해 강제로 에러가 발생하지 않을 것이라고 확신할 때 사용
// 에러가 발생하면 강제로 종료됨
let status3 = try! checkPhoneBatteryStatus(batteryLevel: 30)
print(status3)
더보기
전체코드
import UIKit
// 에러처리 try-catch
// 발생-감지-전파-조작
// 에러 프로토콜
// 스위프트 열거형은 에러 프로토콜을 만들기 좋음
enum PhoneError:Error {
case unknown
case batteryLow(batteryLevel: Int)
}
// 배터리가 부족할때 에러를 발생
// 에러 발생시키기
// throw PhoneError.batteryLow(batteryLevel: 20)
// 던져진 오류를 알리거나 처리하기
/*
1. 에러가 발생한 함수에서 반환 값으로 에러를 반환하여, 해당 함수를 호출한 코드에서 에러를 처 리하도록 합니다.
2. do-catch 구문
3. 옵셔널 값을 반환합니다.
4. assert 를 이용하여 강제로크래쉬를 발생합니다. ( 오류가 발생하지 않을 것이라고 확신하기)
*/
// 핸드폰의 배터리 상태를 체크하는 함수 만들기
/*
// 반환값 없음
func checkPhoneBatteryStatus(batteryLevel: Int) throws {
}
*/
// 반환값이 있다면 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 {
try 오류 발생 가능 코드 {
} catch 오류 패턴 {
처리코드
}
*/
do {
//try checkPhoneBatteryStatus(batteryLevel: -1)
try checkPhoneBatteryStatus(batteryLevel: 20)
}
catch PhoneError.unknown{
print("알 수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batterryLebel) {
print("배터리 전원 부족 남은 배터리 : \(batterryLebel)%")
} catch {
print("그 외 오류 발생 : \(error)")
}
// try? 사용하기
// 에러를 옵셔널 값으로 변환
let status = try? checkPhoneBatteryStatus(batteryLevel: -1)
print(status)
let status2 = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status2)
// try! 사용하기
// 에러가 발생될거 같은 값에 ! 를 사용해 강제로 에러가 발생하지 않을 것이라고 확신할 때 사용
// 에러가 발생하면 강제로 종료됨
let status3 = try! checkPhoneBatteryStatus(batteryLevel: 30)
print(status3)
반응형