[IOS] FIREBASE로 실시간 데이터 파싱

NOAH·2021년 7월 14일
0

ios

목록 보기
12/15

import UIKit
// FireBase의 실시간 데이터 베이스를 위해 import
import FirebaseDatabase


class CoronaViewController: UIViewController {

    
    @IBOutlet weak var tableView: UITableView!
    // 데이터 레퍼런스를 참고 할 수 있도록 추가.
    var ref: DatabaseReference! = Database.database().reference()
 
    /*
    파이버베이스에서 실시간으로 연동해올 것이므로 주석처리
    let countries: [Country] =
        [
            Country(name: "China", numOfConfirmedCases: 4409),
            Country(name: "Korea", numOfConfirmedCases: 1130),
            Country(name: "Japan", numOfConfirmedCases: 1200),
        ]
     */
    
    // 변수 Countries 배열 선언
    var countries: [Country] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //refHandle = postRef.observe(DataEventType.value, with: { (snapshot) in
          // ...
        //})
        
        ref.child("countries").observe(.value){ (snapshot) in
            if let countries = snapshot.value as? [[String: Any]] {
               
                // Backend Data Parsing
                let values = countries.map { dict -> Country in
                  Country(name: dict["name"] as! String,
                            numOfConfirmedCases: dict["num"] as! Int)
                }
               
                // 파싱한 스토어 데이터를 저장
                self.countries = values
                // 저장한 데이터를 기반으로 리스트뷰를 업데이트
                self.tableView.reloadData()
                
                print("--> values : \(countries)")
                 
            }
        }
        
    }
}




// 델리게이트 패턴 : tablieview가 tableViewController에 테이블 뷰를 생성하는데
// 필요한 정보들을 물어본다.
extension CoronaViewController: UITableViewDataSource{
    // 테이블 뷰가 몇줄인가?
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 몇 줄인지 리턴
        return countries.count
    }
    // 각 줄을 어떻게 표현할 할까?
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 어떻게 표현할 지는 이미 테이블 뷰안의 Cell에 구성해두었음
        // 테이블 뷰속의 셀을 뽑아오는 메서드,
        // optional 이기 떄문에 값이 없을 수도 있으므로 guard로 받아러 리턴해주자.
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CoronaVirusCell else {
            return UITableViewCell()
        }
        
        // countries 배열을 차례대로
        let country = countries[indexPath.row]
        // cell의 나라와 확진사 수만 업데이트 시켜보자.
        cell.update(country: country)
        return cell
    }
}

class CoronaVirusCell: UITableViewCell {
    
    @IBOutlet weak var countryName: UILabel!
    @IBOutlet weak var numOfConfirmedCases: UILabel!
    
    //celld의 업데이트를 시키면 country의 이름과 확진자 수를 전달하는 함수
    func update(country: Country){
        
        countryName.text = country.name
        numOfConfirmedCases.text = "\(country.numOfConfirmedCases)"
    }
}

struct Country {
    let name: String
    let numOfConfirmedCases: Int
}

신종 코로나 바이러스 감염자 수 확인 앱 만들기 2편

0개의 댓글