clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • ㅅ
  • uikit
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

Firebase(IOS) - Realtime Database데이터 읽기
Firebase

Firebase(IOS) - Realtime Database데이터 읽기

2022. 7. 21. 17:12

파이어베이스 실시간 데이터베이스에서 데이터를 읽어오는 방법

 

예제로 둘 파이어베이스의 데이터

일단 FirebaseDatabase를 import 해둔다.

1je36JAenW...뭐시기는 uid라는 변수로 대체한다.

데이터를 읽을 땐 reference객체가 필요하다.

reference객체를 생성한다.

//레퍼런스 객체 생성
let ref = Database.database().reference()

만약 User의 uid아래의 정보를 읽어오고 싶다면 이런 코드를 작성한다.

ref.child("User").child(uid).observe(.value){snapshot in
	//데이터 처리 코드 작성
    }

ref의 헤더에서 child(User)의 child(uid)의 value값들을 snapshot으로 observe한다는 소리.

snapshot은 guard let문으로 옵셔널 바인딩을 해주어야한다.

예제로 생성한 firebase의 데이터는 키와 값으로 이루어져 있으므로 Json 형식의 Dictionary타입의 데이터로 받아오게 된다.

Json형식으로 받아오기 때문에 Dictionary로 다운캐스팅을 해주고, Dictionary타입을 다시 한번 키값에 맞는 데이터 타입으로 다운캐스팅을 해줘야 한다.

최종 데이터를 받아와서 저장하는 코드는 이렇게 된다.

ref = Database.database().reference()
        ref.child("User").child(self.uid!).observe(.value){ snapshot in
            guard let value =  snapshot.value as? NSDictionary else {return}
            self.UserDataList.Id = value["id"] as? String ?? "No string"
            self.UserDataList.StudentNumber = value["StudentNumber"] as? String ?? "No StudentNumber"
            self.UserDataList.PhoneNumber = value["PhoneNumber"] as? String ?? "No PhoneNumber"
             run = false
        }

UserDataList는 미리 생성해놓은 구조체이다. 구조체를 만들 때 파이어베이스의 데이터 형식과 Swift의 구조체 데이터 형식이 같아야한다. 또한 value로 옵셔널 바인딩 하였으므로 value[키값]을 입력하면 필요한 키 값의 데이터를 Swift의 구조체로 받아와 사용할 수 있다.

 

만약 User같은 구조체  데이터가 배열 형태로 저장되어야 할 경우

let ComplusorySubjectItem = CompulsorySubjectSnapshot.value as? [String: Any] ?? [:]
            for index in ComplusorySubjectItem{
                for i in 0...self.CompulsorySubjectList.CompulsorySubjectList.count - 1{
                    if index.value as! String == self.CompulsorySubjectList.CompulsorySubjectList[i].SubjectName{
                        self.UserDataList.CompulsorySubjectList.append(Subject(SubjectName: index.value as! String, SubjectCredit: self.CompulsorySubjectList.CompulsorySubjectList[i].SubjectCredit))
                    }
                }
            }
저작자표시 비영리 동일조건 (새창열림)
    'Firebase' 카테고리의 다른 글
    • Firebase(iOS) - Firebase Cloud Messaging(Remote Notification)
    • Firebase(IOS) - 데이터 읽기 동기 처리.
    • IOS - Firebase A/B Testing
    • IOS - Firebase Remote Config
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바