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 |
29 | 30 | 31 |
Tags
- 애니메이션
- Xcode
- UICollectionView
- swiftUI
- ios
- RxCocoa
- Human interface guide
- 리팩토링
- map
- HIG
- Refactoring
- Clean Code
- uitableview
- Protocol
- 리펙터링
- combine
- MVVM
- tableView
- 스위프트
- 리펙토링
- swift documentation
- SWIFT
- collectionview
- rxswift
- ribs
- UITextView
- 클린 코드
- Observable
- uiscrollview
- clean architecture
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] rethrows 예외 처리, 에러 처리 본문
throws
- 함수 내부에서 오류를 밖으로 던지고, 사용하는 쪽에서 그 오류를 처리할 때 사용하는 키워드
- throws키워드는 함수 시그니처의 반환 전 화살표 좌측에 사용
enum MyError: Error {
case negativeValue
}
func plus(one: Int, two: Int) throws -> Int {
guard one < 0 && two < 0 else { throw MyError.negativeValue }
return one + two
}
- throws 처리
do {
let value = try plus(one: -1, two: 2)
print(value)
} catch {
print(error)
}
rethrows
- 파라미터로 전달받은 함수가 에러를 던질 때 사용
- 이름이 rethrows인 이유: argument 내부에서 에러가 발생하면, 다시 외부러 throws를 던져서 외부에서 처리하게끔하기 위한 방법
- 함수 준비
enum MyError: Error {
case negativeValue
}
func plus(one: Int, two: Int) throws -> Int {
guard one < 0 && two < 0 else { throw MyError.negativeValue }
return one + two
}
- 만약 rethrows를 사용하지 않은 경우 -> 사용하는 쪽에서 처리하는게 아닌 함수 내부에서 처리해야 하는 부분이 존재
- throws는 사용하는 쪽에서 처리하기위해서 나온 개념이므로, throws의 의도와 어긋나는 형태
// 아래처럼 사용하는 쪽에서가 아닌, 함수 내부에서 에러처리를 하는 상황
func someFunc(_ function: (Int, Int) throws -> Int) {
do {
print(try function(-1, 0))
} catch {
print(error)
}
}
someFunc(plus(one:two:))
- retrhows 키워드를 이용하여 사용하는 쪽에서 처리하도록 구현
// rethrows를 통해 받은 argument에서 에러가 발생하면 다시 외부로 에러를 던지는 형태
func retrhowsSomeFunc(_ function: (Int, Int) throws -> Int) rethrows {
print(try function(2, 1))
}
// 사용하는 쪽에서 에러처리
do {
try print("결과값 = \(retrhowsSomeFunc(plus(one:two:)))")
} catch {
print("에러 = \(error)")
}
* 참고
https://docs.swift.org/swift-book/ReferenceManual/Declarations.html
'iOS 기본 (swift)' 카테고리의 다른 글
Comments