拿在Objective-C的NSURLSessionDownloadTask
创建方法完成块内的值:检查迅捷的变量的初始化它
NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:[NSURL URLWithString:@"google.com"] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
if (task.state == NSURLSessionTaskStateCompleted) {
// Do things
}
}];
[task resume];
我可以访问非常任务我创建,task
,在完成块内也没有问题。
然而,斯威夫特,如果我尝试同样的事情:
let URL = NSURL(string: "google.com")
let task = NSURLSession.sharedSession().downloadTaskWithURL(URL, completionHandler: { location, response, error in
if task.state == .Completed {
// Do things
}
}
task.resume()
我可以在“变量被其自身的初始值内使用”的错误。
我如何绕过这个?
“我可以访问非常任务我创建,任务,在完成块内也没有问题。“不,你不能,而不是那个代码。任务'应该始终是'nil'或该块内的垃圾。由于'task'不是'__block',所以当块被创建时,该块将捕获'task'的值,这是在下载任务被分配给它之前。 – newacct 2014-10-16 20:02:24