iOS/Swift 어플 따라하기

[Swift] Firebase Realtime Database에서 Parsing Data

Chafle 2022. 4. 3. 00:18
반응형

데이터를 읽고 쓰기를 해봤으니

이번시간에는 서버에 있는 데이터를 parsing 해보겠습니다.

 

 

Firebase Realtime Database - Read Data

https://accompani-i.tistory.com/158

 

[Swift] Firebase Realtime Database에서 Read Data

Firebase에서 데이터를 입력합니다. firstData: Hello Firebase 이후 받아온 데이터를 아래 그림과같이 데이터를 읽어보겠습니다. ViewController import UIKit import Firebase class ViewController: UIViewCo..

accompani-i.tistory.com

 

Firebase Realtime Database - Write Data

https://accompani-i.tistory.com/159

 

[Swift] Firebase RealtimeDatabase Write Data

데이터를 Firebase에 dictionary형태로 writing해보겠습니다. 서점에서 고객관리 데이터를 넣고싶다고 가정 해보면 override func viewDidLoad() { super.viewDidLoad() saveCustomers() } //saveCustomer()호출 f..

accompani-i.tistory.com

 

 

 


 

 

오늘의 목표

firebase에 써놓은 데이터인 고객(customers)의 을 parsing해서

customer.count를 나타내보도록 하겠습니다.

 

 

반응형

 

 

 

ViewController를 UILabel과 연결하는 작업은 생략하도록 하겠습니다.

 

  override func viewDidLoad() {

        super.viewDidLoad()

        updateLabel()

        fetchCustomers()

 


 

extension ViewController {

    func fetchCustomers() {

        db.child("customers").observeSingleEvent(of: .value) { snapshot in

            print("-->\(snapshot.value)")

 

Array로 서버에 썼으니 내려오는 데이터는 당연히 Array

 

 

            //프린트해보니 array형식입니다. -> 이걸 다시 JSON형태로 바꿔줘야 합니다.

            

 

이전에 서버에 넣어줬던 Struct Customer, Struct Book을 Codable 준수하게 끔 변환해줍니다.

 

 

 

 

array(snapshot)->json : JSON형태의 파일은 Codable로 아주 쉽게 파싱 가능

       

    do {

            let data = try JSONSerialization.data(withJSONObject: snapshot.value, options: [])

                let decoder = JSONDecoder()

                let customers: [Customer] = try decoder.decode([Customer].self, from: data)  

                DispatchQueue.main.async {

                    self.numOfCustomers.text = "# of Customers: \(customers.count)"

                }

        } catch let error {

            print("--> error: \(error.localizedDescription)")

            }

        }

    }

}

반응형