티스토리 뷰
class BaseRepository {
var db: DocumentReference {
return Firestore.firestore()
.collection(UserDefaults.tournamentName!)
.document(UserDefaults.tournamentYear!)
}
}
import Firebase 해주고,
Firestore.firestore().collection("").document("")
계속 바뀌는 값 받아오기 ( 조건 걸기도 가능, 젤 밑에 예제 참조)
private var startedListener: ListenerRegistration?
/// 진행 중 참가자 수
func countOfStartedRunner(_ course: String, _ listener: @escaping FIRQuerySnapshotBlock) -> ListenerRegistration {
return passed
.document(course)
.collection("Start")
.addSnapshotListener(listener)
}
startedListener = repository.countOfStartedRunner(course) {
if let error = $1 { print("진행 중 사람 수 가져오기 실패: \(error)") }
// 여기서 데이터를 받아와서 넣음
self.runningIDsOriginal = $0?.documents.map { $0.documentID } ?? []
}
문서 존재하는지 확인하기
/// 골인 처리
func goalIn(_ participant: Participant, _ completion: @escaping (Error?) -> Void) {
let query = passed
.document(UserDefaults.course!)
.collection(collectionName)
.document(uid)
query.getDocument { document, error in
if document!.exists {
print("=== 이미 골인했음")
} else {
query.setData(participant.location.toDictionary()) {
if let error = $0 {
print("error: \(error)")
} else {
print("=== 골인으로 처리했음")
}
}
}
}
raceEnd(participant, completion)
}
문서 지우기
ref.document("dummy_" + String(i)).delete()
조건 걸어서 문서 지우기
func removeDummyLocations() {
currentLocations
.whereField("isTemp", isEqualTo: true)
.getDocuments { snapshot, error in
snapshot?.documents.forEach { document in
document.reference.delete()
}
}
}
문서 제목과 내용 설정하기
func generateDummyRunners() -> [String] {
// 기존에 더미데이터가 만들어진게 있으면 새로 생성하지 않는다.
let ref = participants
let query = participantsDatas
.collection("runner")
.document("dummy_1")
var uidArray: [String] = []
query.getDocument { document, error in
if document!.exists {
return
} else {
for i in 1 ... 100 {
let uid = "".randomUID()
uidArray.append(uid)
ref
.document("dummy_" + String(i))
.setData([
"course": "10k",
"entryNumber": String(9899 + i),
"isDNF": false,
"isDerail": false,
"isGoalIn": false,
"isOffline": false,
"isStaff": false,
"isSweeper": false,
"location": JSLocation(latitude: 1, longitude: 1).toDictionary(),
"uid": uid,
])
}
}
}
return uidArray
}
조건 걸어서 조건에 맞는 필드들만 가져오기
/// 선두 7명 위치 가져오기
func leadingUsers(_ listener: @escaping FIRQuerySnapshotBlock) -> ListenerRegistration {
return currentLocations
.whereField("isStaff", isEqualTo: false)
.whereField("course", isEqualTo: UserDefaults.course!)
.whereField("isDNF", isEqualTo: false)
.whereField("isGoalIn", isEqualTo: false)
.order(by: "progress", descending: true)
.limit(to: 7)
.addSnapshotListener(listener)
}
'macOS, iOS' 카테고리의 다른 글
[iOS] Info.plist 다국어 지원하기 (0) | 2020.04.06 |
---|---|
SwiftUI 키보드 닫기 처리 (0) | 2020.04.06 |
[iOS] background에서 TTS 실행해주기 (0) | 2020.03.31 |
[iOS] TTS 다국어 지원하기 (0) | 2020.03.27 |
[iOS] 애플 로그인에 대한 수많은 질문들 (0) | 2020.03.23 |