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)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅅ
  • Q
  • Swift
  • uikit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

Firebase

Firebase(IOS) - 데이터 읽기 동기 처리.

2022. 7. 21. 17:42

파이어 베이스의 데이터를 읽는 코드는 비동기 방식으로 처리된다.

만약 파이어베이스에서 데이터를 읽는 코드를 작성하고 바로 프린트를 해보면 값은 변경되지 않고 그대로 출력될것이다.

이런식으로

var a = 1
readfirebase() // a가 2로 변경되어야함
print(a)

출력은 1

2로 변경되어야 하는 a는 1로 출력된다.

파이어베이스의 데이터를 받아오는 코드는 비동기적으로 처리되기 때문에 데이터를 읽어온 후 2로 변경되는데

읽어 오기도 전에 프린트를 해버려서 출력이 1이 나온다.

버튼을 만들어서 출력해보면 2로 정상 출력된다.

 

이렇기 때문에 데이터를 읽어온 직후 그 데이터를 사용해야 한다면 원하지 않는 결과를 얻게된다.

 

동기처리 하는 방법

 

데이터 읽는 함수를 호출하는 부분

//데이터 읽기 함수를 호출하는 부분
DispatchQueue.global().async(){
    //데이터를 읽는 함수
    FirebaseDataRead()
    print(a)
}

 

데이터 읽는 함수 내부

func FirebaseDataRead(){
    var run = true
    /* 데이터를 읽고 처리하기 시작 */
    /*         소스코드       */
    /*       run = false    */
    /* 데이터를 읽고 처리를 완료  */
    
    while run{
    
    }
}

DIsptchQueue.global().async()내부의 코드는 비동기적으로 처리됨.

왜인지 정확히는 모르겠다.

비동기 적으로 처리되기 때문에  while은 항상 실행중이여서 무한Loop를 돌게되지만 데이터를 읽어오고 run을 false로 만들어서 그 이후 코드들을 실행시켜 주기 때문인지..

 

completionHandler의 콜백 방식을 사용하면 된다곤 하지만 지금 내 수준으론 뭐가 뭔지도 감이 안오고..

 

추가 + 

func readFirebase(경로: String, completion: (data) -> ()){
    //데이터 읽기 함수를 호출하는 부분
    DispatchQueue.global().async(){
        //데이터를 읽는 함수
        //데이터를 읽어옴
	    completion(data)
    }
}

async내부는 비동기처리 되지만 내부의 코드들은 하나의 코드로 동기적 처리가된다.

읽어오고 호출부에서 컴플리션 핸들러로 넘겨주면 된다.

 

 

 

 

저작자표시 비영리 동일조건 (새창열림)
    'Firebase' 카테고리의 다른 글
    • [Firebase] Authentication Rest API(OAuth)
    • Firebase(iOS) - Firebase Cloud Messaging(Remote Notification)
    • Firebase(IOS) - Realtime Database데이터 읽기
    • IOS - Firebase A/B Testing
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바