Swift自动执行异步

func detect(image: CIImage) {
        guard let model = try? VNCoreMLModel(for: Inceptionv3().model) else {
            fatalError("Loading CoreML Model failed.")
        }

        let request = VNCoreMLRequest(model: model) { (request, error) in
            guard let results = request.results as? [VNClassificationObservation] else {
                fatalError("Model failed to process image")
            }
            print(results)
        }
        print("First")

        let handler = VNImageRequestHandler(ciImage: image)

        do {
            print("Second")
            try handler.perform([request])
            print("Third")
        } catch {
            print(error)
        }

    }

在此示例中,在控制台中打印的内容是:

第一, 第二, “结果”, 第三

所以我的问题是 为什么即使handler.perform函数不在请求完成处理程序中,此代码也为什么有效?

这似乎与NodeJS不同,在NodeJS中,“ request”变量中的数据到达handler.perform时尚未准备就绪。

评论