• alamofire 사용해서 router 작성시
  static func request<T: Decodable, U: URLRequestConvertible>(
    _ object: T.Type,
    router: U,
    completion: @escaping (Result<T, ApiError>) -> Void
  ) {
    AF.request(router)
      .validate(statusCode: 200...299)
      .responseDecodable(of: object) { dataResponse in
        switch dataResponse.result {
        case .success:
          guard let decodedData = dataResponse.value else { return }
          completion(.success(decodedData))
          
        case .failure(let err):
          completion(.failure(ApiError.unknown(err)))
        }
      }
  }

위에처럼 request를 사용하면 저 함수만 사용해서 모두 request할 수 있다. 처음에는 좋아보였는데 저렇게 사용하면 자주 사용하는 함수들은 똑같이 다시 구현해줘야해서 재사용성도 좋지 않고 코드도 길어져서 알아보기 힘들었다.

참고

  • notification center 사용시 값전달하기
NotificationCenter.default.post(
      name: AuthentState.snsSignInNeed.notificationName,
      object: nil,
      userInfo: [
        "uid": uid,
        "kind": kind
      ]
    )
@objc func snsSignInHandler(notification: Notification) {

    guard let uid = notification.userInfo?["uid"] as? String,
          let kind = notification.userInfo?["kind"] as? LoginKind
    else {
      print("DEBUG uid가 전달되지 않았습니다.")
      return
    }
    
    let vc = SNSSignInViewController(
      with: SNSSignInViewReactor(provider: self.reactor.provider,
                                 uid: uid,
                                 kind: kind))
    navigationController?.pushViewController(vc, animated: true)
  }

참고