Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 주사위 게임1
- Error installing cocoapods
- 프로그래머스 n의 배수 고르기
- 프로그래머스 암호 해독
- array
- swift
- 프로그래머스 최댓값 만들기(2)
- 스페인어
- 배열 만들기1
- 프로그래머스 문자열 정렬하기 (1)
- 스파르타 코딩클럽 내일배움캠프
- cocoapods 설치 오류
- 문자열 붙여서 출력하기
- 문자열 정렬하기 (1)
- 프로그래머스 자동커밋
- Break
- continue
- 객체지향
- 프로그래머스 문자열 붙여서 출력하기
- n번째 원소까지
- ruby설치
- 프로그래머스 배열 만들기1
- 조건에 맞게 수열 변경하기 3
- 연산자
- Til
- 프로그래머스 조건에 맞게 수열 변경하기 3
- 스파르타코딩캠프
- 프로그래머스 n번째 원소까지
- 프로그래머스
- 프로그래머스 주사위 게임1
Archives
- Today
- Total
dev._.note
[Swift] 예외처리 본문
📌 실패 가능한 상황과 예외 처리
에러처리
- 프로그램에서 에러가 발생한 상황에 대응하고 이에 대응하는 과정.
- Swift에서는 런타임에 에러가 발생한 경우, 이를 처리를 지원하는 클래스를 제공.
Error
- Error는 던져질 수 있는 오류 값을 나타내는 유형.
- Error 프로토콜을 채택하여 사용자 정의 에러를 정의하여 사용 가능
- 참고 자료: https://developer.apple.com/documentation/swift/error
-
enum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock }
📌 throws와 do-catch 문
throw와 throws
- throws는 리턴 값을 반환하기 전에 오류가 발생하면 에러 객체를 반환한다는 의미.
- throws는 오류가 발생할 가능성이 있는 메소드 제목 옆에 작성.
- throw는 오류가 발생할 구간에서 작성.
throw로 던진 에러를 do-catch문에서 처리
// 표현
func canThrowErrors() throws -> String
func cannotThrowErrors() -> String
enum CustomError: Error {
case outOfBounds
case invalidInput(String)
}
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 블록을 이용하여 throwing 함수 호출 및 에러 처리하기
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
do {
let result = try processValue(-10)
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)")
}
// 출력 : Invalid Input: Value cannot be negative
📌 try , try? , try!
try
- 에러가 발생할 수 있는 코드 블록을 표시.
- 에러를 던질 수 있는 함수나 메서드를 호출할 때 사용.
- 해당 코드 블록에서 발생한 에러를 잡거나 처리 가능(do - catch문).
try?
- do - catch 구문 없이도 사용이 가능.
- 에러 발생시 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)" } // throwing 함수 호출과 에러 처리하기 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?를 사용하여 에러 처리하기 let result1 = try? someThrowingFunction(value: 5) // 유효한 값 호출 print(result1) // Optional("The value is 5") let result2 = try? someThrowingFunction(value: -2) // 에러 발생 print(result2) // nil // try!를 사용하여 에러 처리하기 let result3 = try! someThrowingFunction(value: 5) // 유효한 값 호출 print(result3) // The value is 5 let result4 = try! someThrowingFunction(value: -2) // 에러 발생 print(result4)
- 참고 자료: The Swift Programming Language - Error Handling
'Dev > SWIFT' 카테고리의 다른 글
[Swift] 프로토콜(Protocol) (0) | 2023.12.13 |
---|---|
[Swift] ARC(Automatic Reference Counting) (0) | 2023.12.12 |
[Swift] 클로저(Closure) (0) | 2023.12.10 |
[Swift] Guard문 (0) | 2023.12.08 |
[Swift] 키오스크 과제 (1) | 2023.12.07 |