Xcode 7 beta上用Swift 2.0编写的代码
我的问题涉及传递函数是参数。我有两个函数:getImagesFromImgur和randomImageHandle。 getImagesFromImgur在ViewDidLoad上这样调用:
self.getImagesFromImgur(apiAction: "gallery.json",
handleResponse: self.randomImageHandle)
getImagesFromImgur函数如下所示:
func getImagesFromImgur(apiAction: String, handleResponse:
(NSData?, NSURLResponse?, NSError?) -> Void) {
...
let task = session.dataTaskWithRequest(request, completionHandler:
handleResponse)
...
}
在viewDidLoad中传递给getImagesFromImgur函数的randomImgurHandle如下所示:
func randomImageHandle(data: NSData?, response: NSURLResponse?,
error: NSError?) -> Void {
...
//code that edits the UI
...
}
所以我的问题是,我可以在不指定任何参数值的情况下将self.randomImageHandle传递给self.getImagesFromImgur吗?我知道dataTaskWithRequest会将参数传递给handleResponse,虽然我了解这一点,但我对为什么编译器不强迫我指定参数感到困惑。
编辑:我正在传递这样的句柄,所以我可以有特定的句柄来匹配imgur的Api。
最佳答案
在Swift中,函数是一流的类型,您可以将它们作为变量传递。您实际上正在做的是getImagesFromImgur
期望具有确切签名(NSData?, NSURLResponse?, NSError?) -> Void
的函数(您在这里不需要Void,BTW)。编译器会检查您是否传入了具有该签名的方法,因此您无需指定参数。