Код: Выделить всё
fileprivate class DocumentScanDelegate: NSObject, VNDocumentCameraViewControllerDelegate {
static let shared = DocumentScanDelegate()
var compressionQuality: CGFloat = 1
var onScanSuccess: (UIImage) -> Void = { _ in }
func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
controller.dismiss(animated: true)
guard scan.pageCount >= 1 else { return }
let lastPage = scan.imageOfPage(at: scan.pageCount - 1)
let compressed = lastPage.compressed(quality: compressionQuality)
onScanSuccess(compressed)
}
func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFailWithError error: Error) {
controller.dismiss(animated: true)
}
func documentCameraViewControllerDidCancel(_ controller: VNDocumentCameraViewController) {
controller.dismiss(animated: true)
}
}
- :
Код: Выделить всё
shared
- контроллер 3.dismiss вызовы:
И то, и другое имеет смысл. Итак, я добавил @MainActor в DocumentScanDelegate . Затем первое предупреждение исчезло. Но второе предупреждение звучит так:
Основной метод экземпляра, изолированный от актера, 'documentCameraViewController(_:didFinishWith:)' не может использоваться для удовлетворения требований неизолированного протокола; это ошибка в языковом режиме Swift 6.
Затем я использую @preconcurrency для аннотации соответствия VNDocumentCameraViewControllerDelegate:
Код: Выделить всё
@MainActor
fileprivate class DocumentScanDelegate: NSObject, @preconcurrency VNDocumentCameraViewControllerDelegate {
...
}
Ошибка становится:
Основной метод экземпляра, изолированный от актера, 'documentCameraViewController(_:didFinishWith:)' не может быть используется для удовлетворения требований неизолированного протокола; это ошибка в языковом режиме Swift 6
Со следующей дополнительной ошибкой:
Класс «VNDocumentCameraScan» не соответствует протоколу «Sendable»
Тогда я использую @preconcurrency import:
Код: Выделить всё
@preconcurrency import VisionKit
Есть также новое предупреждение (почему?):
Атрибут @preconcurrency в модуле VisionKit не имеет никакого эффекта
Подробнее здесь: https://stackoverflow.com/questions/787 ... oncurrency
Мобильная версия