语法,其中let(常量)的行为类似于函数。你能解释一下吗?

时间:2015-11-30 14:53:14

标签: ios swift function constants alamofire

我在尝试覆盖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被声明为常量,但它的行为就像一个函数。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

在Swift中,函数是对象,就像整数,双精度,字符串等一样。所以,是的,你绝对可以将函数赋值给常量。因此,常量不具有“Int”或“Double”或“String”类型,但在本例中为“(NSURL,NSURLHTTPResponse) - &gt; NSURL”。

您可以拥有一个函数数组,一个函数作为值的字典,一个或多个实例变量是函数的结构或类,依此类推。