티스토리 뷰
collection > document > collection
whereField 추가 가능.
====
파이어베이스의 realtime DB인 firestore에서 data를 받아오고, 또 DB에 data를 올리고 싶다면 어떤 함수들을 어떻게 써야하는지 내가 기억해두기 위해서 작성하는 게시글이다.
리스너를 받아서 ListenerRegistration을 리턴하는 이 함수는, 리스너를 등록해주는 역할을 하는 함수이다.
func aaaa(listener: @escaping FIRQuerySnapshotBlock) -> ListenerRegistration {
return db
.collection("race_end")
.whereField("isStaff", isEqualTo: true)
.addSnapshotListener(listener)
}
db.collection(콜렉션 이름).whereField(조건).addSnapshotListener(리스너)
저 함수는, 문서와 상관 없이, 모든 문서를 돌면서 조건에 맞는 애를 리턴해준다. 그래서 리턴 값은 배열 형태이다.
만약 문서도 특정하고 싶다면 ?!?
db.collection.document.collection("").addSnapShotListener(리스너)
순서도 정해주고 싶다면?
db.collection(collectionName)
.order(by: "timestamp", descending: false)
.getDocuments(completion: { snapshot, error in
.order(by: "", descending) 옵션을 추가해주면 된다.
개수를 몇개만 받고 싶다면 ?
.limit(to: 1)
=========
저 함수를 쓰는 곳에서,
@State var listener: ListenerRegistration?
listener = aaaa { snapshot, error in
_ = snapshot?.documentChanges
.map { Participant($0.document.data()) }
.map { participant in
RaceManager.shared.raceEndUsers.removeAll { user in user.userId == participant.userId } // 중복제거
RaceManager.shared.raceEndUsers.append(participant)
}
}
aaaa가 함수를 인자로 받아서, 꽤 헷깔릴 수 있다.
func aaaa(test: @escaping (block: Block, error: Error) -> Void) { } 라고 생각하면 된다.
snapshot의 documentChanges를 받아왔다!!!
.getDocuments(completion: { snapshot, error in
let rooms = snapshot?.documents
.map { ChatRoom($0.documentID, $0.data()) }
completion(rooms, error)
})
이 코드는 snapshot의 document를 받아왔다.
함수 선언이랑 콜하는 부분으로 쪼개지 않고, 밑에 코드처럼 하나의 함수에서 다 처리할 수도 있다.
func validateRunner(_ email: String, _ entryNumber: String, _ completion: @escaping (Bool) -> Void) {
var listener: ListenerRegistration?
listener = db.collection("participants")
.document(AppConfig.RACE_YEAR)
.collection("runner")
.whereField("email", isEqualTo: email)
.whereField("entryNumber", isEqualTo: entryNumber)
.addSnapshotListener { snapshot, error in
listener?.remove()
completion(snapshot?.documents.count == 1)
}
}
'macOS, iOS' 카테고리의 다른 글
[Xcode] Xcode 여러 버전 설치하기 (0) | 2020.02.15 |
---|---|
[Swift] 구조체와 클래스의 공통점과 차이점 (0) | 2020.02.06 |
[Swift] tuple (0) | 2020.01.30 |
[iOS] func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { 는 비동기인가보다 (0) | 2020.01.30 |
[iOS] 수출 규정 준수 정보 제공 안할때 info.plist 설정 (0) | 2020.01.29 |