#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])