我是iOS World的新手。当我看到下载文件的方法。我看到这段代码:
{
(data, response, error) in print("task finished")
}
我真的不明白部分:
data
response
error
{}
个对象来自哪里?它们是哪种类型的?我熟悉Java,C#和以上结构等语言非常奇怪:方法调用后是一个let task = NSURLSession.sharedSession().dataTaskWithURL(url: NSURL)
let task = NSURLSession.sharedSession().dataTaskWithURL(url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void)
代码块。我只是看到在iOS中有两种方法与上面有很大不同:
// pdfData is a CFMutableDataRef
// auxInfo is a CFDictionary
// bounds is your new size in points!
CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(pdfData);
CGContextRef context = CGPDFContextCreate(consumer, &bounds, auxInfo);
CGPDFContextBeginPage(context, NULL);
NSGraphicsContext *gc = [NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:NO];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:gc];
// Your drawing code here
// You probably want to draw your NSImage here in the bounds
[NSGraphicsContext restoreGraphicsState];
CGPDFContextEndPage(context);
CGPDFContextClose(context);
CGContextRelease(context);
CGDataConsumerRelease(consumer);
谢谢:)
答案 0 :(得分:2)
{ ... }
中的内容是一个匿名函数体。 (...) in
中的内容是传递给函数的参数的名称。
关于“他们是哪种类型?”的问题部分这是一个非常好的问题。答案是Swift知道你引用的这个声明:
let task = NSURLSession.sharedSession().dataTaskWithURL(url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void)
所以Swift已经知道三个参数的类型,因此可以选择省略类型(这里它们实际上已被省略)。
您可能会因遗漏标签completionHandler:
而感到困惑。这是合法的,因为此函数是 last 参数。在这种情况下,删除标签并将匿名函数体放在函数调用括号之外是合法的(称为“尾随语法”)。
因此,您引用的代码实际上是实施dataTaskWithURL(_:completionHandler:)
的法律形式。