- 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)
}