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)。编译器会检查您是否传入了具有该签名的方法,因此您无需指定参数。

10-08 12:27