일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- Swift
- 1일1알골
- cs
- 후기
- 영남대
- 문법
- dispatchqueue
- uikit
- 스유
- 네트워크
- 멋쟁이사자처럼
- 운영체제
- 대외활동
- widgetkit
- 위젯킷
- widget
- c++
- 스위프트
- 멋사
- swift concurrency
- 알고리즘
- composable architecture
- TCA
- Protocol
- spritekit
- 웹
- SwiftUI
- 리액트
- 컴퓨터그래픽스
- Today
- Total
맛동산이
Swift) Error type에 대해서 본문
swift concurrency와 result에 대해서 사용을 하려고 하다보니 Error타입에 대해서 계속해서 등장을하는데 한번도 제대로 공부해본적이 없는것 같아서 정리해보려고 한다.
Error
스위프트에서 Error는 Error라는 프로토콜을 준수하는 값 타입으로 표현된다.
Error는 빈 프로토콜이라서 Error를 던져주기 위해서는 Error를 그냥 쓰면 안되고 enum으로 Error를 정의해서 던져줘야 제대로된 Error를 채택하는 에러를 ㅋㅋ( 말이 웃기네 ㅋㅋㄹㅋㅋ) 던져준다.
그냥 간단하게 Error자체로는 못씀.
enum으로 Error를 정의해줘야 사용가능
Error 타입 정의
enum NetworkError: Error {
case 종류1
case 종류2
case 종류3
//...
}
이렇게 enum을 통해서 에러를 생성하고, 이를 던져주면된다.
혹은 message를 던져주거나 전달해주려고 한다면 다음과같이
enum 오류종류이름: Error {
case commonError(String)
case 종류2
case 종류3
//...
}
commonError를 던져주고 받을때 case let으로 String값을 전달해주는 방식으로 처리해도 된다.
정의된 에러를 사용하기
private func asnycThrows() async throws -> Result<Model?, NetworkError> {}
이런 함수라면 Result에서 Model을 던져줄수도, 에러가 발생했을때 NetworkError타입을 던져줄수도 있다.
이때 에러를 던져준다면
Result.success(Model())
Result.failure(.commonError(message))
이렇게 성공시 Model을 실패시 NetworkError.commonError(String)을 넘겨줄수 있게 된다.
에러타입을 정의하고 싶다면? ( 에러 케이스가 아닌.)
에러타입을 직접적으로 생성할수도 있다.
동일하게 Error를 채택하고있는 class나 struct 로도 에러를 생성할수 있다.
방법은 간단하다.
protocol ErrorType {
var source: String?
....
}
struct APIError: Error, ErrorType, Equtable {
var source: String?
...
}
이렇게 직접 만들어서 decoding 시점에서 Error로 던져주거나 혹은 async await이라면 catch 시점에서 error를 생성해서 뿌려주면 될듯 하다.
'앱 > Swift' 카테고리의 다른 글
CustomView) Two Button Slider 구현하기 UIkit (0) | 2024.10.17 |
---|---|
Swift) deepLink, Universal Link 처리하기 (1) | 2024.09.17 |
Swift) OptionSet, 그리고 이를 이용한 ActionSheet를 사용해보자 (0) | 2024.08.23 |
Swift) Delegate, Completionhandler 를 async await을 통해서 리팩토링하는법(by. continuation) (1) | 2024.06.06 |
Swift) Decodable, custom Decoder 복잡한 데이터 모델을 나누는 방법에 대해서 (2) | 2024.06.06 |