如何保留在完成块中设置的局部变量?

时间:2016-02-07 07:42:18

标签: ios swift swift2

我有一个函数,它接收一个URL并异步返回一个文件URL,当我在fileURL块中打印出completion块的值时,它会完美打印出来,但变量({{1} })不保留fileURL

之外的值
completion

FileFactory.FetchFileWithURL(workingURL, completionHandler: { (url) -> Void in fileURL = url print(fileURL) //prints valid URLs }) print(fileURL) //prints nil 定义为: -
fileURL

如何确保var fileURL:String?保留fireURL阻止的值?

编辑:

发现了类似的问题,但不幸的是它出现在completion here

在swift

中是否有任何等效的Objective-C objc

2 个答案:

答案 0 :(得分:3)

调用块内的新函数。在新方法中使用fileURL做你想做的事。

FileFactory.FetchFileWithURL(workingURL, completionHandler: { (url) ->    Void in
        fileURL = url
        print(fileURL) //prints valid URLs
        doSomethingWithFileUrl(url)
    })

答案 1 :(得分:0)

FetchWithURL是一个异步函数。 fileUrlcompletionHandler中实例化,只有在异步任务完成后才会调用fileUrl。因此,根本不可能使用尚不存在的值。

需要使用completionHandler完成的任何操作必须在同一FileFactory.FetchFileWithURL(workingURL, completionHandler: { (url) -> Void in fileURL = url print(fileURL) //prints valid URLs //other operations with fileURL }) 内完成。

--name some-postgres