Skip to content

Commit db990c3

Browse files
feat: 5XX 오류시 ErrorViewController를 띄움
1 parent 5189d16 commit db990c3

2 files changed

Lines changed: 38 additions & 3 deletions

File tree

Koin/Apps/SceneDelegate.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
1212
var window: UIWindow?
1313
var urlParameters: [String: String]?
1414

15+
override init() {
16+
super.init()
17+
NotificationCenter.default.addObserver(self, selector: #selector(presentErrorViewController), name: NSNotification.Name("ServerError"), object: nil)
18+
}
19+
1520
func scene(_ scene: UIScene,
1621
willConnectTo session: UISceneSession,
1722
options connectionOptions: UIScene.ConnectionOptions) {
@@ -115,5 +120,18 @@ extension SceneDelegate {
115120
return viewController
116121
}
117122

118-
123+
@objc private func presentErrorViewController() {
124+
125+
if let navigationController = window?.rootViewController as? UINavigationController {
126+
127+
let homeViewController = makeHomeViewController()
128+
let completion: ()->Void = {
129+
navigationController.setViewControllers([homeViewController], animated: false)
130+
}
131+
let errorViewController = ErrorViewController(completion: completion).then {
132+
$0.modalPresentationStyle = .fullScreen
133+
}
134+
navigationController.present(errorViewController, animated: true)
135+
}
136+
}
119137
}

Koin/Data/Service/Network/NetworkService.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ final class NetworkService {
1919
.publishData()
2020
.value()
2121
.map { _ in }
22-
.mapError { $0 as Error }
22+
.mapError { error -> Error in
23+
self.handleError(error)
24+
}
2325
.eraseToAnyPublisher()
2426
}
2527

@@ -53,9 +55,12 @@ final class NetworkService {
5355

5456
func requestWithResponse<T: Decodable>(api: URLRequestConvertible) -> AnyPublisher<T, Error> {
5557
return AF.request(api, interceptor: interceptor)
58+
.validate()
5659
.publishDecodable(type: T.self)
5760
.value()
58-
.mapError { $0 as Error }
61+
.mapError { error -> Error in
62+
self.handleError(error)
63+
}
5964
.eraseToAnyPublisher()
6065
}
6166

@@ -156,8 +161,20 @@ extension NetworkService {
156161

157162
private func handleError(_ error: Error) -> ErrorResponse {
158163
if let errorResponse = error as? ErrorResponse {
164+
if let code = Int(errorResponse.code),
165+
500..<600 ~= code {
166+
NotificationCenter.default.post(name: NSNotification.Name("ServerError"), object: nil)
167+
}
159168
return errorResponse
160169
}
161170
return ErrorResponse(code: "", message: "알 수 없는 에러")
162171
}
172+
173+
private func handleError(_ error: AFError) -> Error {
174+
if let code = error.responseCode,
175+
500..<600 ~= code {
176+
NotificationCenter.default.post(name: NSNotification.Name("ServerError"), object: nil)
177+
}
178+
return error as Error
179+
}
163180
}

0 commit comments

Comments
 (0)