iOS/Swift 어플 따라하기

[Swift] FireStore에 저장한 데이터 불러오기(데이터 읽기)

Chafle 2022. 9. 6. 20:47
반응형
 override func viewDidLoad() {
        super.viewDidLoad()
        loadMessages()

 

 

 func loadMessages() {
        messages = []
        db.collection(K.FStore.collectionName).getDocuments { (querySnapshot, error) in
            if let e = error {
                print("There was an issue retrieving data from Firestore. \(e)")
            } else {
                if let snapshotDocuments = querySnapshot?.documents {
                    for doc in snapshotDocuments { // firebase -> firestore에 제시된 방법과 동일
                        let data = doc.data()
                        if let messageSender = data[K.FStore.senderField] as? String, let messageBody = data[K.FStore.bodyField] as? String {
                            let newMessage = Message(sender: messageSender, body: messageBody)
                            self.messages.append(newMessage)
                            DispatchQueue.main.async {
                                self.tableView.reloadData()
                            }
                           
                        }
                    }
                }
            }
        }
    }

 

querySnapshot.documents - array 타입

messageSender를 할당할 때 data[firestore에 저장할 때 사용했던 값]

Any->String으로 다운캐스팅 해야 newMessage = Message(sender: messageSender, body: messageBody)가능

 

클로져 내부에 있을 때는 self붙여주고 self.messages.append(newMessage)

 

 


 

data를 가져오는 프로세스가 클로저 내부에서 발생하기 때문에 백그라운드에서 일어나게 되는데

tableview를 업데이트 하기 위해서는 main thread를 가져와야 한다.

 

 

DispatchQueue.main.async {

인터페이스를 조작하려고 할 때마다 tableView를 업데이트하려고 하고 클로저 내부에 있는 경우 main queue에 홀드 시키는 습관 가지자

self.tableView.reloadData() // tableview를 탭하고 데이터 소스를 트리거할 수 있다는 것

}

 

 

 

 

 

반응형