微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在正确的时间未执行功能,但在完成块后执行

如何解决在正确的时间未执行功能,但在完成块后执行

需要帮助弄清楚为什么我的功能在我认为应该执行时不执行,而是在代码中的完成块之后执行。我对Xcode还是很陌生,所以如果这里听起来令人困惑,请原谅。下面是我的代码

ImageDownloader类

typealias completionHandler = (Result<Set<ARReferenceImage>,Error>) -> ()
typealias ImageData = (image: UIImage,orientation: CGImagePropertyOrientation,physicalWidth: CGFloat,name: String)

static let URLDic = [ReferenceImagePayload]()


class func getDocumentData(completion:@escaping ([ReferenceImagePayload]) -> ()) {
    var documentCollection: [ReferenceImagePayload] = []
    db.collection("Users").getDocuments {(snapshot,error) in
        if error == nil && snapshot != nil {
            var index = 0
            for document in snapshot!.documents {
                let loadData = document.data()
                index += 1
                if loadData["Target URL"] != nil {
                    let url = loadData["Target URL"]
                    let urlString = URL(string: "\(String(describing: url ?? ""))")
                    let urlName = loadData["Target Image"]
                    documentCollection.append(ReferenceImagePayload(name: urlName as! String,url: urlString!))
                    if snapshot!.documents.count == index {
                        // After finished,send back the loaded data
                        completion(documentCollection)
                    }
                }
            }
          }
    }
}


static var receivedImageData = [ImageData]()


class func downloadImagesFromPaths(_ completion: @escaping completionHandler) {
    

//最初调用此类时,我不调用功能的下一行。但是,随着代码的运行,下面的这一行将在完成操作=完成块操作之后执行

    let loadedDataDic: () = getDocumentData { (URLDic) in
        print(URLDic.self,"Got it")
    }


    let operationQueue = OperationQueue()

    operationQueue.maxConcurrentOperationCount = 6
    
    let completionoperation = BlockOperation {
        OperationQueue.main.addOperation({
        completion(.success(referenceImageFrom(receivedImageData)))

// LINE“ letloadDataDataic:()= getDocumentData”仅在此点执行

        })
    }



    URLDic.forEach { (loadData) in

            let urlstring = loadData.url
            
            let operation = BlockOperation(block: {

                do{
                    let imageData = try Data(contentsOf: loadData.url)
                    print(imageData,"Image Data")

                    if let image = UIImage(data: imageData){

                        receivedImageData.append(ImageData(image,.up,0.1,loadData.name))
            
                    }
                    }catch{

                        completion(.failure(error))
                    }
                })
          
                completionoperation.addDependency(operation)
            }
    
    operationQueue.addOperations(completionoperation.dependencies,waitUntilFinished: false)
    operationQueue.addOperation(completionoperation)

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。