在 Xcode 7 beta 上用 Swift 2.0 编写的代码
我的问题是传递函数是参数。我有两个函数:getImagesFromImgur 和 randomImageHandle。像这样在 ViewDidLoad 调用 getImagesFromImgur:
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,顺便说一句)。编译器会检查您是否传入了具有该签名的方法,因此您不需要指定参数。
关于ios - 为什么声明为需要参数的 swift 函数可以在没有参数的情况下传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32029962/