반응형
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를 탭하고 데이터 소스를 트리거할 수 있다는 것
}
반응형
'iOS > Swift 어플 따라하기' 카테고리의 다른 글
[Swift] Firestore에서 읽은 데이터를 시간 순으로 정렬 (0) | 2022.09.06 |
---|---|
[Swift] FireStore 실시간 업데이트 수신 대기(실시간 데이터 읽어오기) (0) | 2022.09.06 |
[Swift] FireStore에 데이터 저장하기 (0) | 2022.09.06 |
[Swift] Xib파일을 사용하여 TableView에서 셀 사용자 지정 (0) | 2022.09.06 |
[Swift] Firebase 이메일 회원가입, 로그인하기, 로그아웃하기 (0) | 2022.09.01 |