我已经阅读了关于同一问题的其他几个问题,但不知何故,完成处理程序对其他答案的工作方式不同。此外,这些答案来自 2015 年,这让我想知道它是否特定于 Swift 1.x
无论如何,这是我的问题。我正在进行常规的 GET 调用,我想将下载的数据返回给调用方法。不知何故,这不想为我工作。
这是我正在做的代码(都在一个 ViewController 类中):
override func viewDidLoad() {
super.viewDidLoad()
// get initial GET call
getConfigurationLink();
}
func getConfigurationLink(completionHandler:String?) -> Void
{
let collectionUrl = NSURL(string: collectionUrlString);
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration();
let headers: [NSObject : AnyObject] = ["Accept":"application/json"];
configuration.HTTPAdditionalHeaders = headers;
let session = NSURLSession(configuration: configuration);
let configurationUrlTask = session.dataTaskWithURL(collectionUrl!) {(data, response, error) in
completionHandler("test")
}
configurationUrlTask.resume()
}
使用此代码,行completionHandler("test")
编译失败并Cannot call value of non-function type String?
显示消息。
所以我的问题是:
如何创建一个可以作为参数传递给方法的 conpletionHandler?
为什么完成处理程序失败?
如果没有完成处理程序,该方法只会在网络调用完成之前返回一个空值,正如预期的那样。
谢谢。