Swift - 闭包表达式语法

Posted

技术标签:

【中文标题】Swift - 闭包表达式语法【英文标题】:Swift - closure expression syntax 【发布时间】:2015-09-10 10:33:26 【问题描述】:

我正在使用 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 是可选的,因为提供了 default 语句。 我不明白Destination 是如何处理的。 你能解释一下关闭是如何处理的吗? 为什么花括号在方法调用之后是打开的,而不是在 URLString param 之后的调用内部?

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

马可

【问题讨论】:

查看 Swift 书中的"Trailing Closures"。 【参考方案1】:

这是尾随闭合技术

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

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

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

【讨论】:

以上是关于Swift - 闭包表达式语法的主要内容,如果未能解决你的问题,请参考以下文章

Swift初见Swift闭包

Swift学习笔记:闭包

swift中的闭包总结

Swift语法之.map

《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!

Swift 5.1 新语法