내일배움캠프 앱개발 iOS 트랙 본캠프 3주차
Today I Learned
예외처리, 에러처리
프로그램에서 에러가 발생하는 상황에 대응하는 것
프로그램이 원하는대로 동작하지 않을 경우를 대비해야 하므로!
예외 처리를 통해서 예외적인 상황을 구별하고 사용자에게 어떤 에러가 발생했는지 알려주는 조치를 해야한다.
Swift는 런타임에서 에러 발생한 경우 처리를 지원하는 클래스를 제공한다.
Error
던져질 수 있는 오류 값을 나타내는 유형
Error 프로토콜을 사용해서 사용자 정의 에러를 만들 수 있다
enum KioskError: Error {
case invalidSelection
case inIsString(String)
}
throws , throw
thorws
- 리턴값을 반환하기 전에 오류가 발생했을 시, 에러 객체를 반환한다
- 오류가 발생할 가능성이 있는 메소드 이름 옆에 써준다
func processValue(_ value: Int) throws -> Int {
}
throw
- 오류가 발생할 구간에서 써준다
func processValue(_ value: Int) throws -> Int {
if value < 0 {
throw CustomError.invalidInput("Value cannot be negative")
} else if value > 100 {
throw CustomError.outOfBounds
}
return value * 2
}
do - catch
- thorw 로 던진 에러를 처리해준다
enum CustomError: Error {
case outOfBounds
case invalidInput(String)
}
do {
let result = try processValue(50)
print("Result is \(result)")
} catch CustomError.outOfBounds {
print("Value is out of bounds!")
} catch CustomError.invalidInput(let errorMessage) {
print("Invalid Input: \(errorMessage)")
} catch {
print("An error occurred: \(error)")
}
// 출력 : Result is 100
try try? try!
try
- 에러가 발생할 수 있는 코드 블록 표시
- 에러를 던질 수 있는 함수, 메서드를 호출할 때 사용한다
- 코드 블록에서 발생한 에러를 발견하거나 처리할 수 있다 (do-catch)
enum MyError: Error {
case invalidInput
}
func someThrowingFunction(value: Int) throws -> String {
guard value >= 0 else {
throw MyError.invalidInput // value가 음수인 경우 에러를 던짐
}
return "The value is \(value)"
}
do {
let result = try someThrowingFunction(value: 5)
print(result)
} catch {
print("Error occurred: \(error)")
}
do {
let result = try someThrowingFunction(value: -2) // 에러 발생
print(result)
} catch {
print("Error occurred: \(error)") // 음수 값을 처리하는 에러
}
try?
- do-catch 문 없이도 사용가능
- 에러가 발생하면 nil을 반환한다
- 에러가 발생하지 않으면 리턴값은 옵셔널로 반환된다
enum MyError: Error {
case invalidInput
}
func someThrowingFunction(value: Int) throws -> String {
guard value >= 0 else {
throw MyError.invalidInput // value가 음수인 경우 에러를 던짐
}
return "The value is \(value)"
}
let result1 = try? someThrowingFunction(value: 5) // 유효한 값 호출
print(result1) // Optional("The value is 5")
let result2 = try? someThrowingFunction(value: -2) // 에러 발생
print(result2) // nil
try!
- 에러 발생 시 앱이 강제 종료된다
- 절대 오류가 발생하지 않는다는 보장 하에 사용해야 한다. (앱이 강제 종료되므로)
- 리턴값은 옵셔널이 언래핑된 값으로 반환된다 (옵셔널 강제추출?)
enum MyError: Error {
case invalidInput
}
func someThrowingFunction(value: Int) throws -> String {
guard value >= 0 else {
throw MyError.invalidInput // value가 음수인 경우 에러를 던짐
}
return "The value is \(value)"
}
let result3 = try! someThrowingFunction(value: 5) // 유효한 값 호출
print(result3) // The value is 5
let result4 = try! someThrowingFunction(value: -2) // 에러 발생
print(result4)
'iOS > Swift' 카테고리의 다른 글
[Swift] iOS AutoLayout (0) | 2023.12.12 |
---|---|
[Swift] 프로토콜, 확장 (0) | 2023.12.11 |
[Swift] 고차함수(3/3) filter(_:) (0) | 2023.11.23 |
[Swift] 고차함수(2/3) reduce(_:_:) (0) | 2023.11.23 |
[Swift] 고차함수(1/3) map (0) | 2023.11.23 |