xcode - Swift - 闭包表达式语法

标签 xcode swift syntax closures alamofire

我正在使用 Alamofire 库,我注意到他们使用这种语法

func download(method: Alamofire.Method, URLString: URLStringConvertible, headers: [String : String]? = default, #destination: Alamofire.Request.DownloadFileDestination) -> Alamofire.Request

它需要 4 个参数作为输入,但是如果你转到 documentation调用他们使用的方法如下

Alamofire.download(.GET, "http://httpbin.org/stream/100") { temporaryURL, response in
let fileManager = NSFileManager.defaultManager()
if let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL {
    let pathComponent = response.suggestedFilename
    return directoryURL.URLByAppendingPathComponent(pathComponent!)
}
return temporaryURL}

只需要 2 个参数(method:URLString:)我认为参数 headers 是可选的,因为提供了 默认语句。 我不明白 Destination 是如何处理的。 你能解释一下关闭是如何处理的吗? 为什么花括号在方法调用之后是打开的,而不是在 URLString param 之后的调用内部?

非常感谢您提供的任何帮助

马可

最佳答案

尾随闭包技术

如果一个方法接受一个闭包作为最后一个参数

class Foo {
    func doSomething(number: Int, word: String, completion: () -> ()) {

    }
}

您可以按照经典方式调用它:

Foo().doSomething(1, word: "hello", completion: { () -> () in 
    // your code here
})

或者使用尾随闭包技术:

Foo().doSomething(1, word: "hello") { () -> () in 
    // your code here
}

结果是一样的,只是语法更优雅(恕我直言)。

关于xcode - Swift - 闭包表达式语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499461/

相关文章:

iphone - 为我的 UI 元素设置标签?

swift - 为什么我的变量在转换为 int 后返回 nil?

javascript - 这个 JavaScript 语法是什么意思?函数(){http : var a = 2; }

c - 用于无括号、空格敏感的 C 语法的工具

javascript - js 将两个函数传递给一个方法

ios - 如何在 iPhone 上验证 url

ios - 将 iOS 10.3.3 与 Xcode 版本 8.2.1 一起使用?

ios - 无法从此设备复制符号

ios - Xcode 模拟器 TableView 是黑色的

swift - 从单元格转换 UIButton 以运行查询并将结果发送到另一个单元格