홈>
firestore의 문서 변경에 리스너를 추가하고 싶습니다. 어떻게 든 리스너가 여러 번 트리거되었지만 리스너가 한 번 트리거 한 코드를 실행하고 싶습니다. 기본적으로 리스너가 한 번 트리거 된 후 제거하고 싶습니다. 어떻게해야합니까? 감사합니다
업데이트 : 사용하려는 코드는 다음과 같습니다.
db.collection("cities").document("SF")
.addSnapshotListener { documentSnapshot, error in
guard let document = documentSnapshot else {
print("Error fetching document: \(error!)")
return
}
print("Current data: \(document.data())")
//my other code
}
리스너가 여러 번 트리거 될 수 있습니다. "다른 코드"만 한 번, 즉 리스너가 처음 트리거되기를 원합니다.
-
답변 # 1
-
답변 # 2
문서 변경 사항을 수신하는 코드는 다음과 같습니다.
/// Add listener to query listener = db.collection("cities").document("SF").addSnapshotListener { (querySnapshot, error) in /// Check if snapshot is not nil guard let snapshot = querySnapshot else { print("Error: \(error.debugDescription)") return } /// Check if snapshot has documents and not empty guard snapshot.documents.last != nil else { // The collection is empty. return } /// This is the on change listner snapshot.documentChanges.forEach({ (diff) in print(diff.document.data()) if (diff.type == .added) { } else if (diff.type == .modified) { } else if (diff.type == .removed) { } }) }
이제
listener
인스턴스가 생겼습니다. 언제든지들을 수 없습니다.listener.remove()
BTW는 일회용으로
getDocuments(completion:)
를 사용해야합니다 한 번만 호출합니다.수정 :
getDocuments(completion:)
예queryRef.whereField(key, isEqualTo: value).getDocuments(completion: { (querySnapshot, error) in if let _error = error { print (_error.localizedDescription) return; } guard let _querySnapshot = querySnapshot else { print("querySnapshot is nil") return; } for document in _querySnapshot.documents { print(document.data()) } })
관련 자료
- dart - 사용자가 활성 상태 일 때 Firestore에서 '상태'값을 어떻게 변경합니까?
- java - 비 활동 클래스 (리포지토리 클래스) Android에서 Firestore 리스너를 제거하는 방법은 무엇입니까?
- firebase - 로컬 인쇄에 Firestore 문서 스냅 샷 리스너 사용
- firebase - flutter/firestore - 실시간 리스너가있는 streambuilder 및 firestore
- addeventlistener - 레일의 Dropzone + Active Storage 이벤트 리스너
- android - firestore - 탐색 drawerlayout에서 textview를 업데이트하는 스냅 샷 리스너를 언제 분리해야합니까?
- 프로그래밍 방식으로/PHP API를 사용하는 프로젝트 용 활성 Cloud Firestore 데이터베이스
관련 질문
- ios - 모든 필드가 "0"이면 Foreach 하나의 뷰를 반환합니다
- swift - SwiftUI arrayisEmpty는 Firestore에서 배열을받을 때까지 표시되지 않습니다
- swift - @ServerTimestamp를 Firestore에서 한 번 설정하고 업데이트시 건너 뛸 수 있습니까?
- firebase - NavigationLink Text Swift, Cloud Firestore에 따라 맞춤 정보 표시
- MVVM 아키텍처 Swift를 사용한 Firestore 페이지 매김
- swift - 컬렉션을 사용하여 Firestore 문서를 검색 할 수 없습니다
- swift - 문서 경로 SwiftUI에서 무작위로 생성 된 Firebase 하위 키
다음과 같은 것을 찾고 있다고 생각합니다 :