【问题标题】:Call completionHandler in function after embedded function returns value? Swift嵌入函数返回值后在函数中调用completionHandler?迅速
【发布时间】:2016-09-29 00:37:59
【问题描述】:

在包含另一个函数的函数中调用 completionHandler() 的正确方法是什么?基本上,我想等到嵌入函数完成后再调用completionHandler。

func somefunc {    

transferManager?.download(downloadRequest).continue( {(task: AWSTask) -> AnyObject! in

    // Your handler code here
    if (task.error != nil) {
        print("- Error while downloading!")
        print(task.error)
    }

    else if (task.result != nil) {
        //let downloadOutput: AWSS3TransferManagerDownloadOutput = task.result as! AWSS3TransferManagerDownloadOutput
        do {
            let dFile  = try NSString(contentsOf: downloadingFileURL as URL, encoding: String.Encoding.utf8.rawValue)
            print(dFile)
            modelsParseCSV(contentsOfURL: downloadingFileURL)
        }
        catch {
            print("- Error: Unable to retrieve contents of csv file")
        }
    }
    else {
        print("- Uknown error: AWSS3 get file")
    }


    print("------------ AWS Get Models File End ----------")
    return nil

})

completionHandler()
}

【问题讨论】:

  • completionHandler() 移动到return nil 上方的行会成功吗?
  • 更好 - 将调用 return nil 替换为调用 completionHandler()。但是completionHandler 是在哪里定义的?
  • 对不起,上面定义了代码完成处理程序,我只是未能将其复制进去。我看到如果我在 return nil 之前调用 completionHandler,则不会调用 return nil。如果我删除 return 语句,它会引发错误...

标签: swift function completionhandler


【解决方案1】:

我能够解决我自己的问题。以下代码调用完成处理程序并在嵌入函数完成后:

func AWS_getModelsFile(AWSMake: String, completionHandler: (() -> Void)! ) {

    .........

    transferManager?.download(downloadRequest).continue( {(task: AWSTask) -> AnyObject! in

        // Your handler code here
        if (task.error != nil) {
            print("- Error while downloading!")
            print(task.error)
        }

        else if (task.result != nil) {
            //let downloadOutput: AWSS3TransferManagerDownloadOutput = task.result as! AWSS3TransferManagerDownloadOutput
            do {
                let dFile  = try NSString(contentsOf: downloadingFileURL as URL, encoding: String.Encoding.utf8.rawValue)
                print(dFile)
                modelsParseCSV(contentsOfURL: downloadingFileURL)
            }
            catch {
                print("- Error: Unable to retrieve contents of csv file")
            }
        }
        else {
            print("- Uknown error: AWSS3 get file")
        }


        print("------------ AWS Get Models File End ----------")
        completionHandler()
        return nil

    })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多