- RealtimeDB를 활용하여 실시간 채팅 앱 구현
default.mp4
- RealtimeDB에서 데이터를 받아오는 중, struct로 받아오질 못하는 문제
- struct를 RealtimeDB로 update할 수 없는 문제
1. RealtimeDB에서 기본 데이터타입이 아닌 struct로 받고 싶다면
-> Dictionary로 받고 JSONSerialization으로 data 타입으로 변환한 뒤 구조체로 decoding 한다.
guard let value = snapshot.value as? [[String: Any]]
else { return }
guard let data = try? JSONSerialization.data(withJSONObject: value),
let responseData = try? JSONDecoder().decode([MessageModel].self, from: data)
self?.chatList = responseData
2. struct를 RealtimeDB로 전송하고 싶다면
-> encoing 하고 JSONSerialization으로 Dictionary로 변환한 뒤 전송한다.
guard let data = try? JSONEncoder().encode(chatList),
let dictionary = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]]
else {
throw ChatError.encodingError
}
databaseRef.child("chattingList").setValue(dictionary)
- 같은 사람이 여러번 채팅을 보낼 시 프로필을 1개만 보이도록 처리