Обновление данных из SwiftUI в базу данных Firestore

#google-cloud-firestore #swiftui #avplayer

# #google-облако-firestore #swiftui #avplayer

Вопрос:

Я работаю над приложением swiftui, которое транслирует фильмы и связано с Firebase. В настоящее время я пытаюсь узнать время приостановки видео (через AVPlayer) и обновить его в поле времени моей базы данных, чтобы пользователи могли начать с того места, где они остановились. Я пытаюсь обновить данные, используя кодируемый формат, а также импортировал FirebaseFirestoreSwift. Однако код не вносит никаких изменений в базу данных, поэтому мне было интересно, могу ли я получить помощь. Запрос данных из базы данных работает отлично, мне просто нужно руководство по обновлению различных полей коллекции фильмов из SwiftUI. Большое спасибо!

 import FirebaseFirestoreSwift

...

@State var SectionX: movies

....

//when video is ended record time and update value to firestore time field

.onDisappear {
          avPlayer.pause()
                                    
          let db = Firestore.firestore()
          let currentTime = Float(avPlayer.currentTime().seconds)
                                   
          print(currentTime)

          db.collection("movies").document(SectionX.id)
          SectionX.time = String(currentTime)

          func updateTime(_ mov: movies) {
              do {
                   let _ = try db.collection("movies").document(SectionX.time).setData(from: currentTime)
                 }
              catch {
                       print(error)
                 }
          }
}


struct movies : Codable,Identifiable {
    var id: String
    var title: String
    var img: String
    var video: String
    var description: String
    var genre: String
    var maturity: String
    var time: String
    var year: String
    var acting: String
    var directors: String
    var writers: String
    var producers: String
    var watched: Int
    var rating: Int
}

class getMoviesData : ObservableObject{
    @Published var datas = [movies]()
    
    init(){
        let db = Firestore.firestore()
        db.collection("movies").addSnapshotListener{ (snap, err) in
            if err != nil{
                print((err?.localizedDescription)!)
                return
            }
            
            for i in snap!.documentChanges{
                let id = i.document.get("id") as! String
                let title = i.document.get("title") as! String
                let img = i.document.get("img") as! String
                let video = i.document.get("video") as! String
                let description = i.document.get("description") as! String
                let genre = i.document.get("genre") as! String
                let maturity = i.document.get("maturity") as! String
                let time = i.document.get("time") as! String
                let year = i.document.get("year") as! String
                let acting = i.document.get("acting") as! String
                let directors = i.document.get("directors") as! String
                let writers = i.document.get("writers") as! String
                let producers = i.document.get("producers") as! String
                let watched = i.document.get("watched") as! Int
                let rating = i.document.get("rating") as! Int
                
                self.datas.append(movies(id: id, title: title, img: img, video: video, description: description, genre: genre, maturity: maturity, time: time, year: year, acting: acting, directors: directors, writers: writers, producers: producers, watched: watched, rating: rating))
            }
        }
    }
}

 

Ответ №1:

Получилось! Просто нужно было использовать метод updateData.

 
let x = db.collection("movies").document(SectionX.id).documentID                                  
db.collection("movies").document(x).updateData(["time":currentTime])