ios - 为什么声明为需要参数的 swift 函数可以在没有参数的情况下传递?

标签 ios swift swift2

在 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/

相关文章:

iphone - 从纵向切换到横向时背景图像未调整大小

ios - 我的代码是否未正确实现 google chromecast 按钮和流媒体功能?

ios - 我从 IOS Firebase API 获得 Apple Revoke Tokens Endpoint Parameters (client_id, client_secret, token)

ios - 使用 Sprite Kit 在 Swift 中绘制直线,创建多条线

swift - 无法调用类型 : Swift2 的初始值设定项

ios - 在 Swift for iOS 中沿圆形路径绘制文本

ios - 快速关闭弹出窗口后刷新 View

ios - 如何将 swift pod 类导入 Objective C UIView 类

ios - 登录详细信息未保存在 Xcode 9.4 的 UIWebView 中?

android - 当我运行我的 flutter 应用程序时显示白色空白屏幕