# #ios #swift #xcode #firebase
Вопрос:
Привет, мое приложение выходит из строя, когда я запускаю функцию englishTranslator.downloadModelIfNeeded
, она выходит из строя только в том случае, если я вставляю englishTranslator.translate(resultText)
ее или под ней. Приложение работает, если я удаляю один из них, но оно не переводит текст. Вот мой полный код:
import UIKit
import Firebase
class ViewController: UIViewController, UIImagePickerControllerDelegate amp; UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
label.frame = view.frame
DispatchQueue.main.asyncAfter(deadline: .now() 1) {
let vc = UIImagePickerController()
vc.sourceType = .camera
vc.allowsEditing = true
vc.delegate = self
self.present(vc, animated: true)
}
view.addSubview(label)
}
private var label: UILabel = {
let label = UILabel()
label.font = UIFont(name: "ArialMT", size: 25)
label.text = "Detected Text Here"
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.textAlignment = .center
return label
}()
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true)
guard let image = info[.editedImage] as? UIImage else {
print("No image found")
return
}
let vision = Vision.vision()
let textRecognizer = vision.onDeviceTextRecognizer()
let image2 = VisionImage(image: image)
textRecognizer.process(image2) { result, error in
guard error == nil, let result = result else {
return
}
let resultText = result.text
DispatchQueue.main.async {
self.label.text = "(resultText)"
}
print(resultText)
let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)
languageId.identifyLanguage(for: resultText) { (languageCode, error) in
if let error = error {
print("Failed with error: (error)")
return
}
if let languageCode = languageCode, languageCode != "und" {
print("Identified Language: (languageCode)")
let options3 = TranslatorOptions(sourceLanguage: .fromLanguageCode(languageCode), targetLanguage: .en)
let englishTranslator = NaturalLanguage.naturalLanguage().translator(options: options3)
let conditions = ModelDownloadConditions(
allowsCellularAccess: false,
allowsBackgroundDownloading: true
)
englishTranslator.downloadModelIfNeeded(with: conditions) { error in
guard error == nil else { return }
}
englishTranslator.translate(resultText) { translatedText, error in
guard error == nil, let translatedText = translatedText else { return }
DispatchQueue.main.async {
self.label.text = translatedText
}
}
} else {
print("No language was identified")
}
}
}
}
}