我刚刚打开了一个我没有修改过的项目,并注意到一个警告:“将在未来版本的Swift中删除Curried函数声明语法;使用单个参数列表”。
我不太确定如何在这种情况下抢先删除我的curried功能(这对我来说似乎是完美的解决方案)。我目前正在使用一个将其他参数传递给完成处理程序。
func getCoursesForProfile(profileName: String, pageNumber: Int) {
if let url = NSURL(string:profileBaseURL + profileName + pageBase + String(pageNumber)) {
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: parseSessionCompletion(profileName, pageNumber: pageNumber))
task.resume()
}
}
func parseSessionCompletion(profileName: String, pageNumber: Int)(data: NSData?, response: NSURLResponse?, error: NSError?) {
我的问题:有没有办法完成去除currying,同时仍然具有解析“完成的会话”的可重用功能?
我想要解决的唯一“简单”方法是拥有一个类的不同实例,并将profileName / pageNumber保持在函数范围之外......但这在多种方面看起来很浪费。
答案 0 :(得分:1)
不会删除Currying - 它只是用于定义被删除的curry函数的便捷语法。现在,您必须将curried函数定义为显式返回另一个函数(单个参数列表)。
例如,在您的情况下,您会想要这样的内容:
func parseSessionCompletion(profileName: String, pageNumber: Int) -> (data: NSData?, response: NSURLResponse?, error: NSError?) -> () {
// do something
return {data, response, error in
// do something else
}
}
请查看proposal for the removal of the currying syntax以获取有关更改的更多信息。