코드 가독성 개선
UserService
UserService > fetchUsers
func fetchUsers(completion: @escaping([User]) -> Void) {
var users = [User]()
Firestore.firestore().collection("users").getDocuments { snapshot, _ in
guard let documents = snapshot?.documents else {
return
}
documents.forEach { document in
guard let user = try? document.data(as: User.self) else {
return
}
users.append(user)
}
completion(users)
}
}
fetchUsers 메서드는 기존의 fetchUser 메서드를 변형한 형태로 구현했다.
- CompletionHandler로 전달할 변수 선언
- DB에서 받아온 documents 열거
- 변수에 저장
- 변수를 CompletionHandler에 전달
위와 같은 방식으로 동작하고, 문제도 없지만 조금 더 깔끔한 방식으로 코드를 개선할 수 있다.
compactMap()
Swift의 compactMap 메서드를 사용하면 몇 개의 과정을 합쳐 과정을 생략하는 것이 가능하다.
func fetchUsers(completion: @escaping([User]) -> Void) {
Firestore.firestore().collection("users").getDocuments { snapshot, _ in
guard let documents = snapshot?.documents else {
return
}
let users = documents.compactMap({ try? $0.data(as: User.self) })
completion(users)
}
}
- compactMap으로 DB에서 받아온 documents 배열로 변환후 Binding
- Binding 된 변수 CompletionHandler에 전달
compactMap은 전달되는 데이터를 배열로 변환해 반환하는데, 위와 같이 Closure를 구성해 전달해 같은 기능을 하도록 구현할 수 있다.
'프로젝트 > Twitter Clone App (w∕Firebase)' 카테고리의 다른 글
18. 기능 구현 #6 (0) | 2023.01.13 |
---|---|
17. 기능 구현 #5 (0) | 2023.01.12 |
15. 기능구현 #4 (0) | 2023.01.11 |
14. 버그 수정 #1 (0) | 2023.01.11 |
13. DB와 연결하기 #2 (0) | 2023.01.10 |