Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift3 我如何知道数据何时完成下载_Swift3_Completionhandler - Fatal编程技术网

Swift3 我如何知道数据何时完成下载

Swift3 我如何知道数据何时完成下载,swift3,completionhandler,Swift3,Completionhandler,我想知道下面的函数何时完成数据下载 我知道我可以使用完成处理程序,但这是在NSObject中,我想知道何时返回此函数的完成处理程序,确保在函数返回完成处理程序和视图控制器恢复其逻辑之前,视频已完全下载并准备就绪 谢谢:) “将数据写入文件”实际上是“成功写入文件”,谢谢@LeoDabus。看起来是真的。我认为data.write(到url)是在文件开始写入时,但实际上是在文件完成写入时。 func downloadVideo(identity:JSON_Video){ // use gu

我想知道下面的函数何时完成数据下载

我知道我可以使用完成处理程序,但这是在NSObject中,我想知道何时返回此函数的完成处理程序,确保在函数返回完成处理程序和视图控制器恢复其逻辑之前,视频已完全下载并准备就绪

谢谢:)


“将数据写入文件”实际上是“成功写入文件”,谢谢@LeoDabus。看起来是真的。我认为data.write(到url)是在文件开始写入时,但实际上是在文件完成写入时。
func downloadVideo(identity:JSON_Video){
    // use guard to make sure you have a valid url
    let videoId = identity.video_id!
    let videoString:String = "\(Constants.endPoint_video)\(videoId).mp4"

    guard let videoURL = URL(string: videoString) else { return }
    let library_url = self.findVideo(video: identity)

    if self.findVideo(video: identity) != nil{
        print("Video exists. No need to download")
        print("Existing video \(library_url!)")
    }else{
        print("Video not found. Downloading now")

        // Variables to input on request
        let loginString = Constants.loginString
        let loginData = loginString.data(using: String.Encoding.utf8)!
        let base64LoginString = loginData.base64EncodedString()

        // URL request
        var urlRequest = URLRequest(url: videoURL)
        urlRequest.httpMethod = "GET"
        urlRequest.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

        // set up the session
        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)

        // make the request
        let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in

            // do stuff with response, data & error here
            if let error = error{
                print("Data Session Error: \(error.localizedDescription)")
                print(response ?? "No response")
                return
            }
            if let data = data {
                print("Incoming video....")
                print("Data: \(data.description)")

                if let finalDatabaseURL = self.videosBaseUrl()?.appendingPathComponent("\(identity.video_id!).mp4"){
                    print("Copying from: \(videoURL)")
                    print("Copying to: \(finalDatabaseURL)")

                    do {
                        try
                        data.write(to: finalDatabaseURL)
                        print("Writing data to file")
                        // *****
                        // How do I know when data finished writing?
                        // Completion handler goes here ?
                        // *****
                    }catch{
                        print("Error writing data to file")
                        print(error.localizedDescription)
                    }
                }
            }

           }
        })
        task.resume()
    }
}