Прогресс отслеживания 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()
            }
        }
    }

Спасибо

0 ответов

Другие вопросы по тегам