Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

네트워크 요청과 객체 decode를 하는 메서드에서 실행할 핸들러 분리 #82

Open
jinios opened this issue Mar 9, 2019 · 0 comments
Assignees
Labels
refactor need to refactor

Comments

@jinios
Copy link
Owner

jinios commented Mar 9, 2019

class func goToSearchViewController(of mart: T, handler: @escaping((T,[U]?) -> Void)) {
    // make url
    session.dataTask(with: url) { (data, response, error) in

        if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode {
            do {
                // do something
                handler(T, [U])
            } catch {
                handler(T,nil)
            }
        } else {
            handler(T,nil)
        }
        }.resume()
    }
}
  • 위와같이 네트워크 응답으로 데이터를 받아온 후 바로 객체로 decode하는 메서드에서 비정상 상황에 실행되는 블럭은 decode에 실패했을 때 실행되는 catch문과 네트워크 응답에 문제가 생겼을때 실행되는 else이렇게 두 군데이다.
  • 핸들러의 파라미터에 nil을 주는것으로 정상 / 비정상 상황을 구분하고있지만, 위에서 말한 catchelse문 두 가지도 구분이 필요하다.
  • 상위모듈에서 이를 구분하게 하기 위해서는... 현재로서는 두 가지의 방법이 떠오른다.
    • 핸들러에 어떤 상황으로 인해서 기능을 수행할 수 없는지를 가늠하는 파라미터 추가. 결과적으로 핸들러의 파라미터가 세개가 된다.
    • 비정상 상황에서 실행할 cancelHandler자체를 goSearchViewController메서드의 파라미터로 추가. 위의 방법보다 더 최악인거같다.
  • 좋은 방법이 뭐가 있을까?ㅠㅠ 조금 더 고민해봐야겠다..
@jinios jinios added the refactor need to refactor label Mar 9, 2019
@jinios jinios self-assigned this Mar 9, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactor need to refactor
Projects
None yet
Development

No branches or pull requests

1 participant