我在尝试覆盖Swift中的文件时出现了这种语法,但是我无法理解它,因为似乎常量的行为就像一个函数(我使用Alamofire进行网络化):< / p>
let destination: (NSURL, NSHTTPURLResponse) -> (NSURL) = {
(temporaryUrl, response) in
if response.statusCode == 200 {
if NSFileManager.defaultManager().fileExistsAtPath(pdfUrl.path!) {
try! NSFileManager.defaultManager().removeItemAtURL(pdfUrl)
}
return DocumentDirectoryUrl.URLByAppendingPathComponent(pdfFileName)
}
else {
return temporaryUrl
}
}
以下是destination
let DocumentDirectoryUrl = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!)
let pdfFileName = filename
let pdfUrl = DocumentDirectoryUrl.URLByAppendingPathComponent(pdfFileName)
我不明白它是如何工作的,因为destination
被声明为常量,但它的行为就像一个函数。有人可以向我解释一下吗?
答案 0 :(得分:2)
在Swift中,函数是对象,就像整数,双精度,字符串等一样。所以,是的,你绝对可以将函数赋值给常量。因此,常量不具有“Int”或“Double”或“String”类型,但在本例中为“(NSURL,NSURLHTTPResponse) - &gt; NSURL”。
您可以拥有一个函数数组,一个函数作为值的字典,一个或多个实例变量是函数的结构或类,依此类推。