사전 준비
- Firebase Realtime Database에서 설정을 해주고 받은 info.plist를 프로젝트에 추가해준다.
- firebase/database를 pod파일에 추가해주고 install해준다.
데이터 불러오기
- 뷰컨에서
FirebaseDatabase
를 import해준다.
- db에 있는 레퍼런스를 불러오기 위해
viewdidLoad
에 Database.database().reference()
를 프로퍼티에 저장한다.
- 값을 불러와야하는데 방금 생성한 프로퍼티에
.observe(.value)
를 통해 값을 읽을 수 있다. 그러면 생기는 snapshot을 우리가 사용할 수 있는 형식으로 디코딩해준다. self.ref.observe(.value) { snapshot in
guard let value = snapshot.value as? [String: [String: Any]] else { return }
do {
let jsonData = try JSONSerialization.data(withJSONObject: value)
let cardData = try JSONDecoder().decode([String: CreditCard].self, from: jsonData)
let cardList = Array(cardData.values)
self.creditCardList = cardList.sorted { $0.rank < $1.rank }
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let error {
print("Error json parsing \(error)")
}
}
데이터 쓰기
- db의 데이터들 중 고유한 값으로 객체를 찾아낸다
- 찾아낸 값을 observe하고 받은 snapshot에서 객체의 key를 찾아내고, 그 key에 원하는 값을 넣어준다.
let cardID = creditCardList[indexPath.row].id
self.ref.queryOrdered(byChild: "id").queryEqual(toValue: cardID).observe(.value) {[weak self] snapshot in
guard let self = self,
let value = snapshot.value as? [String: [String: Any]],
let key = value.keys.first else { return }
self.ref.child("\(key)/isSelected").setValue(true)
}
데이터 삭제
- 데이터 쓰기와 동일하게 객체를 찾아내고
setValue()
대신 removeValue()
를 해준다