我想在图像下载完成后设置图像变量。我正在使用'inout'将图像变量传递给我的下载函数,但它没有设置。Swift inout没有设置
这里是我的代码:
var img: UIImage?
func downloadImage(url: String?, inout image: UIImage?) {
if url != nil {
var imgURL: NSURL = NSURL(string: url!)!
var request: NSURLRequest = NSURLRequest(URL: imgURL)
NSURLConnection.sendAsynchronousRequest(request, queue:
NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,
data: NSData!,error: NSError!) -> Void in
if error == nil {
dispatch_async(dispatch_get_main_queue(), {
// setting img via inout doesn't work
image = UIImage(data: data) // inout img should be set but its not
println(img)
// setting img directly works, but don't want it hard coded
img = UIImage(data: data)
println(img)
})
}
else {
println("Error")
}
})
}
}
downloadImage(<<IMAGE URL HERE>>, &img) // passing img as an inout
林期待变量img
这是作为一个INOUT的图像被下载后,设置的downloadImage功能过去了,但它永远不会被更新。
我期待行:image = UIImage(data: data)
来更新IMG INOUT变量,但它没有。
但是,直接引用img变量的行:img = UIImage(data: data
)被更新。
但我不想直接在函数中硬编码img
变量,我希望能够通过inout
传递任何我想要的变量。
任何想法,为什么我不能更新inout变量,以及如何解决它。 谢谢。
异步代码不会同步运行。 – nhgrif 2015-04-02 01:09:08
你的评论是不是很有帮助 - 一些意见,将不胜感激 – Bingo 2015-04-02 01:12:53
您的功能运行异步代码。异步块中的代码在函数返回之前不会完成。除了期望在函数返回之前完成异步代码之外,代码没有任何问题。 – nhgrif 2015-04-02 01:13:36