본문 바로가기

프로젝트/Twitter Clone App (w∕Firebase)

16. 코드 가독성 개선

코드 가독성 개선
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()

 

Apple Developer Documentation

 

developer.apple.com

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