Прогресс отслеживания SFSpeechRecognizer не работает
У UIProgressView есть свойство с именем НаблюдаемыйПрогресс (тип: Progress), а у SFSpeechRecognizer есть очередь (тип: OperationQueue) и очередь имеет прогресс (тип: Progress), поэтому я пытаюсь передать его в представление прогресса, но не работает. Пользовательский интерфейс находится в SwiftUI. Вот код:
Обертка прогресса:
struct ProgressView: UIViewRepresentable {
var transcriptProgress : Progress?
func makeUIView(context: UIViewRepresentableContext<ProgressView>) -> UIView {
let progressView = UIProgressView(frame: CGRect(x: 0, y: 0,
width: UIScreen.main.bounds.width,
height: 44))
progressView.observedProgress = transcriptProgress
return progressView
}
func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<ProgressView>) { }
}
Распознаватель:
var transcriptProgress : Progress?
func transcriptFile() {
fileStatus = .transcripting
guard let myRecognizer = SFSpeechRecognizer() else { return }
myRecognizer.supportsOnDeviceRecognition = true
if !myRecognizer.isAvailable { return }
let path = dirDocs() + "/" + (fileName ?? "")
let url = URL(fileURLWithPath: path)
let request = SFSpeechURLRecognitionRequest(url: url)
request.shouldReportPartialResults = true
request.taskHint = .dictation
/// here is where I pass the progress to a global var
self.transcriptProgress = myRecognizer.queue.progress
myRecognizer.recognitionTask(with: request) { (result, error) in
if let errore = error {
self.fileStatus = .errorTranscript
debugPrint("error: \(errore.localizedDescription)")
return
}
guard let result = result else { return }
if result.isFinal {
self.saveTxtForAsset(text: result.bestTranscription.formattedString)
print("Result:\n\(result.bestTranscription.formattedString)")
}
}
}
SwiftUI View, в котором отображается прогресс:
var body: some View {
VStack(alignment: .leading, spacing: 0) {
HStack {
VStack(alignment: .leading) {
Text(asset.nome)
Text(asset.fileName ?? loc("UNAVAILABLE")).padding(.bottom)
}
Spacer()
if asset.fileStatus == .readyToTranscript ||
asset.fileStatus == .errorTranscript {
buttonTranscript.buttonStyle(BorderlessButtonStyle())
}
buttonDelete.buttonStyle(BorderlessButtonStyle())
}.padding(.bottom)
HStack {
Text(asset.reflectStatus())
Spacer()
if asset.fileStatus == .doneTranscript {
buttonWatchTranscription.buttonStyle(BorderlessButtonStyle())
}
}
if asset.fileStatus == .transcripting {
ProgressView(transcriptProgress: asset.transcriptProgress).padding()
}
}
}
Спасибо